Apache Maven JDeps插件3.0.0版本發布

jopen 9年前發布 | 12K 次閱讀 JDeps
 

一個全新的maven插件 剛剛發布 ,可利用jdeps實用程序查找JDK內部API的使用情況。當該插件被激活時,在代碼中如果發現任何內部API的調用都會導致maven構建失敗。從Java 9開始,內部API將變為不可訪問,因此這個插件可以幫助開發者讓他們的代碼與下一版本的Java兼容。盡管標注為3.0.0,實際上這是該插件的第一個發布版本。

正如在其 項目主頁 中所描述的,該插件為用戶提供兩個可用的目標:jdkinternals和test-jdkinternals。前一個目標會檢查主代碼中是否包含對內部API的引用,而后一個則對測試代碼做同樣的檢查;jdkinternals默認情況下會與maven的process-classes階段(在編譯后立即執行)相關聯,而test-jdkinternals則會與process-test-classes階段相關聯(在測試代碼編譯后立即執行)。默認的配置可以引用該插件并以如下方式同時激活兩個目標:

<build>
    <plugins>
        <plugin>
            <groupid>org.apache.maven.plugins</groupid>
            <artifactid>maven-jdeps-plugin</artifactid>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <goals>
                       <goal>jdkinternals</goal>
                       <goal>test-jdkinternals</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!— Other plugins —>
    </plugins>
</build>

舉例來說,假設一個項目使用了內部類 sun.misc.BASE64Decoder 。當該項目配置使用了JDeps插件,maven會構建失敗并提示如下原因:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jdeps-plugin:3.0.0:jdkinternals (default) on project   : Found offending packages:
[ERROR] sun.misc -> JDK internal API (rt.jar)
[ERROR] -> [Help 1]

作為其中一部分輸出,對于項目中的每個包,maven還會列示出所有引用了該段代碼的包,以及該包的源碼。作為上個示例輸出的一部分,我們會發現如下包中使用了BASE64Decoder:

package.name (classes)
      [... other packages ...]
      -> sun.misc                                           JDK internal API (rt.jar)

這能夠幫助開發人員定位出現問題的地方。不過有另外一種方法能夠獲取到更多細節。 如之前所述,這個插件基于由Oracle提供的,作為JDK 8一部分的 jdeps 工具包。如果插件由于查找到對內部API的引用,強制構建失敗,用戶就可以使用jdeps嘗試找出與導致問題的API相關的更多信息;有時,如果有非內部API可替換,jdeps甚至可以為用戶指出該非內部API。繼續上面提到的BASE64Decoder的例子,運行帶有合適選項的jdeps將會得出如下結果:

jdeps -jdkinternals target/classes/*  

[...]

JDK Internal API                         Suggested Replacement
----------------                         ---------------------
sun.misc.BASE64Decoder                   Use java.util.Base64 @since 1.8

不過,如果某個內部API還不存在可替代品,就像sun.misc.Unsafe,這個插件有可能會阻斷開發。由于這個緣故,該插件對于那些目前尚未使用任何內部API并且希望確保將來也不會使用它們的用戶來說最為實用。Martijn Verburg,jClarity的聯合創始人,自2012年以來的Java冠軍程序員,在 最近的一次交流 當中,鼓勵所有的開發者使用Apache Maven JDeps插件,以減少將來向Java 9遷移所需投入的精力。

查看英文原文: Apache Maven JDeps Plugin 3.0.0 Released

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!