成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Jigsaw項目簡介:Java 7的新模塊系統

開發 后端
本文通過收集一些與Jigsaw項目(Project Jigsaw)相關的報道,介紹了這個Jigsaw項目是如何隨著Java 7(JDK7)越來越近而逐漸清晰。Java的模塊化在幾年間由OSGi建立了規則,現在,是否將由Jigsaw取而代之呢?

本文收集了一些與Jigsaw項目(Project Jigsaw)相關的報道,旨在讓讀者們更加清楚的了解這個Java 7中的新玩意兒是做什么用的。

在Jigsaw項目成為OpenJDK的一部分時的聲明

為了在接下來的幾年中能夠模塊化JDK 7,同時也為了更好地宣傳JSR 294的工作,Sun打算不久之后在OpenJDK社區中創建Jigsaw項目。

該努力必然會創建一個簡單、低層次的模塊系統,其設計將聚焦于模塊化JDK這個目標。開發者可以在自己的代碼中使用該模塊系統,Sun也會全力支持該系統,但它并不會成為官方Java SE 7平臺規范的一部分,也不一定會得到其他SE 7實現的支持。

如果未來的Java SE平臺包含了特定的模塊系統,那么Sun將提供一種方式來移植Jigsaw模塊以使之符合相應的標準。同時,我們還會積極地尋求與其他模塊系統交互的方式,尤其是OSGi。

模塊化JDK這個目標應該是可以實現的,尤其是Apache Harmony已經證明了JDK是可以被模塊化的(使用OSGi)。然而這個目標卻因另一個原因而變得更加有趣:它將在JCP外實現。

由于缺少可視化的發展過程,再加上閉門造車的實現,對于大多數人來說很難參與進JSR 277,更別提對其獻計獻策了。通常這會導致標準的誤入歧途,使得標準過于關注實現的細節而忽視了通用性。不僅如此,這還會導致標準成為事后諸葛亮——想解決問題時(例如奇數的版本號)卻發現已經太遲了。根據聲明所述,JSR277還處于“領導地位”,但它實際已死。

從JSR277中分離出的JSR294(以前可是個龐然大物,不過現在已經模塊化了)是個很大的進步;它將引入一些語言上的變化,這會使得模塊化的實現獨立于任何特定的模塊化進程。

從聲明中看到的激動人心的事情還有OSGi已經成為模塊化的事實上的標準了,這種合作是件好事。但這不一定意味著它將基于OSGi實現,事實上,它只是建議***與OSGi而不是其他方式合作:

JSR 277的JAM模塊系統并不適合作為模塊化JDK的基礎,那么OSGi框架如何呢?該模塊系統非常成熟、穩定和健壯。其核心甚至已經在Java虛擬機中實 現出來了,也就是Apache Harmony。OSGi并沒有與Java語言集成,相反,它構建在Java SE平臺之上而不是其中。

這***的問題也能解決。Sun現在計劃直接與OSGi聯盟合作以便OSGi框架的未來版本能充分利用JSR 294的特性進而能和語言集成的更加緊密。

08年底,Java 7新特性展望

現在的Java程序員,或者說所有語言的程序員,都面臨著日益增多的開源和商業類庫,往往要花費很長時間來管理其依賴關系。今天的一個普通企業應用程序往往要依賴數十個外部JAR文件,其本身往往就能包含數十個不同團隊開發的更小內部工程。我們一直在堅持尋找更好的方式來管理日益復雜的依賴關系,以使我們的開發更具重用性,部署更加完整。現在出現了越來越多的類似Maven的依賴關系管理系統,以及諸如OSGi之類的運行時部署系統,這一點正是反應了這種需求的增長趨勢。

在Java SE 7發展初期,兩個重要的JSR曾經試圖解決依賴關系管理問題,分別是JSR 294:Java編程語言中的改進模塊性支持(Improved Modularity Support in the Java Programming Language)和JSR 277:Java模塊系統(Java Module System),兩者分別關注Java模塊概念的開發和部署方面。一個模塊(module)就是多個實現相同目標且相互存在聯系的類的集合,與JAR類似,但是,根據開發和部署的需要,一個模塊的范圍可以是一個JAR的一部分,也可以是幾個JAR的集合。在2008年中期,JSR 294被簡化并合并到JSR 277中,以便同一個專家組能夠先后研究這兩個方面。

在2008年12月份,Sun再次重新審視這一計劃,宣布在OpenJDK社區中創建Jigsaw項目,以在明年實現JDK 7模塊化。JSR 277和Java模塊系統的研究將被放到Java SE 7推出之后進行,而JSR 294將被重新恢復研究。Sun已經聲明了此舉的意圖是,與OSGi聯盟更緊密的配合,以便JSR 294模塊可以被OSGi所使用。

在Java SE 7中有一個問題將得到解答,即Sun將如何來使用module關鍵字,它是最初的JSR 294中的一個重要概念,預計將包含在下一平臺版本中。

假定有一個名為Flapjack的項目由幾個Java包(package)組成,該項目包含在基包(base package)中的一個public APIs,和實現這個API的幾個內部包:

·org.flapjack - public API classes

·org.flapjack.impl - 實現類

·org.flapjack.util - 實用類

在Java SE 6中,如果你需要在基包中放置一個工廠類(factory class),以實例化內部執行包中的API類,你需要將這個實現類設為public,這樣它們才可以從API包中被看到。由于跨越了不同的包,沒有辦法既允許API以factory方法對類實例化,又不允許外部類直接執行它。

JSR 294模塊將允許你聲明整個包集合為一個模塊,你只需要在源程序中加入以下一個新的聲明:

module org.flapjack;你可以將這個聲明加在你的項目中每一個源程序文件中,也可以將其增加到package-info.java文件中,然后一次將其應用到整個包。雖然module是一個新關鍵字,它是一個“限制性”關鍵字,只有在特定位置時才被作為關鍵字來處理;因此,它可以在任何其它地方作為普通Java標識符來使用。這使得它擴展了語言的功能,同時又保持了其向后兼容性。

除了新的聲明外,你還可以把module關鍵字當作一個新的可見性修飾符使用,你可以用它來定義一個類,使其僅對同一個模塊中的其它類可見,Listing 1演示了module關鍵字的這種用法。

  1. Listing 1 
  2. module org.flapjack;  
  3. package org.flapjack.impl;  
  4. import org.flapjack.Flapjack;  
  5. module class FlapjackImpl implements Flapjack {  
  6. }  

***,你可以定義一個新的module-info.java偽類,使用元數據來注釋該模塊,增加諸如版本、主類、導入的依賴模塊、導出資源和許多其它預定義或特定的模塊注釋等。值得注意的是,與現有的package-info.java文件一樣,這個新的module-info.java文件使用了一個無效Java源文件名稱,可以避免與已經存在的文件可能發生沖突。

在編譯時,JSR 294讓你可以使用javac來編譯你的類。至于在JVM中,Jigsaw項目將如何規定模塊的組成、加載和驗證,尚需拭目以待。

09年5月,JavaOne前夕對Jigsaw的展望

……這個新的模塊系統的***部分就是JSR-294,即所謂的超級包。也正是這個規范闡釋了Java語言的模塊部分的概念。

JSR-294引入了新的可見性關鍵字“module”。如果一個成員擁有這樣的可見性,那就意味著它只對同一模塊中的成員可見。它會創建一個內部的 API,只有模塊本身能調用。就此看來,“public”關鍵字應當只在聲明一個公共的API時才用。而在其他情況下,應當使用“module”或者有更多限制的可見性關鍵字。當然,一旦語言中有了“module”關鍵字,那么模塊之間的可見性限制將會由編譯器來負責檢查。

JSR-294也允許定義依賴性。你可以在某個給定版本中,定義某個模塊依賴于另一模塊。比如:

  1. //org/netbeans/core/module-info.java  
  2. @Version("7.0")  
  3. @ImportModule(name="java.se.core", version="1.7+")  
  4. module org.netbeans.core;  

***一句表明“org.netbeans.core”模塊依賴“java.se.core”的1.7版本或者更高。這類似于Maven的依賴性或者 OSGi的導入。你也可以暫時不要管這些語法,因為將來語法可能會另有變化。重要的是,這兒的依賴是在module-info.java中定義的,會被編譯成class文件。而OSGi中,依賴則是在普通的文本文件中定義的。

Jigsaw項目是這個新模塊系統的第二部分。我預計它會是JSR-294特定于Sun的實現,也會是Sun JDK的模塊化實現。既然創建完整的JDK模塊化是有必要的,Sun就希望把標準庫分裝成模塊。這直接簡化了JRE中的內容整合。整個JRE除了Swing之外的所有內容因此都能夠在移動設備上運行。它還有可能為語言引入新的標準API,而無需再等待整個平臺的新版本發布。目前看起來,這個項目絕對有希望實現。

但我對此還有個擔憂,那就是,專有的Jigsaw和JSR標準之間的關系并不清晰,正如Mark Reinhold所說的:

對Jigsaw的投入無疑會創建出一個簡單的、低層次的模塊系統,它的設計會嚴格地朝著JDK模塊化的目標而發展。開發人員可以把這個模塊系統運用到他們的代碼中去,Sun對這個模塊系統也會是絕對的支持,但它不會是Java SE 7平臺規范的官方部分,也可能不會被其他SE 7實現所支持。

這段話說的不是很清楚,當中有很多疑問。他的意思是說創建的模塊只能在Sun JRE中運行嗎?還是想說,如果開發者寫了“@ImportModule(name="java.se.core", version="1.7+")”,那么這個模塊只能在Sun JRE中運行,而不能在IBM JRE環境中運行嗎?或者他的意思是不是說Sun會以某種方式把它的JRE分割成許多模塊,而Oracle會選擇另外的方式去分割嗎?(譯者注:至少現在看來,不太會有這樣的可能了,因為Oracle剛剛收購了Sun)。我們希望都不是,因為還有“編寫一次,到處運行”的原則。

細究起來問題更多。我們并不清楚Jigsaw項目的主要目標是什么。據項目本身所宣布的主要目標來看,它要實現的是Sun JRE的模塊化,但如果純粹是要實現模塊化的話,就不需要對語言做任何改變。Sun可以對JRE進行模塊化,而不修改Java語言本身。

這些語言上的變化會不會成為Sun JRE模塊化帶來的副產品?如果是,那就徹底錯了!語言變化必須是一等公民,而不是專屬的副產品。

【更多關于Java 7的文章推薦】

  1. 6月5日外電頭條:探秘Java 7模塊化 類路徑永遠消失
  2. 走進Java 7中的模塊系統
  3. Java 7將向細顆粒并行化發展
  4. Java 7路線圖更新 未包含閉包特性
  5. Java 7新特性展望 語言本身的改變會很少
  6. 走進Java 7中的模塊系統
責任編輯:yangsai 來源: 51CTO整理
相關推薦

2009-05-14 14:46:33

SunJava 7模塊系統

2020-12-25 10:28:41

JavaScript模塊module

2011-09-15 19:17:11

windows 7記事本

2020-03-30 13:40:18

新冠病毒開源硬件

2012-04-13 09:13:47

Java

2010-03-12 17:29:16

Python模塊

2010-09-25 09:30:28

JDK 7Java 7

2012-08-28 09:15:23

2012-08-28 08:45:15

2009-04-09 08:59:33

Windows 7微軟操作系統

2011-09-06 09:47:21

WindowsVistIE7保護模式

2024-05-28 00:00:10

Python模塊開發

2011-07-26 09:09:37

Java

2022-08-26 05:43:38

模塊篡改保護網絡攻擊

2009-06-19 14:11:14

Spring框架

2010-04-30 15:51:48

Unix系統

2010-09-09 18:15:36

IBMPower7Sun

2010-01-14 13:56:49

JSR 294Java模塊化OSGi

2009-04-09 09:02:40

Windows 7微軟操作系統

2009-05-06 09:03:50

微軟Windows 7操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 视频一区二区中文字幕日韩 | 综合网视频 | 日本精品视频一区二区三区四区 | 99精品网 | 久久www免费视频 | 高清视频一区 | 欧美一级淫片免费视频黄 | 国产一区二 | 91在线看片 | 一区二区三区视频免费看 | 日本久久久一区二区三区 | 国产精品久久久久久久久免费桃花 | 国内激情av片 | а_天堂中文最新版地址 | 日韩在线不卡视频 | 国产一区二区在线视频 | 超碰3| 久久久精 | 久久精品青青大伊人av | 成人在线黄色 | 91看片官网 | 精品免费| 黄色大片免费播放 | 福利视频一二区 | 欧美精品1区2区 | 日韩中文字幕在线免费 | 亚洲精品黄色 | aaaaaa大片免费看最大的 | 日本免费视频 | 中文字幕一区二区三区在线观看 | 性高湖久久久久久久久 | 国产成人一区二区 | 中文字幕日韩一区 | 日日骚视频 | 99re6在线 | 亚洲免费毛片 | 亚洲第一免费播放区 | 欧美舔穴| 日韩在线国产精品 | 成人h视频在线观看 | 亚洲精品一区二区三区蜜桃久 |