為什么我打的jar包沒有注解?


本文來自網易雲社區

作者:王飛

一、前言

一切問題的起源就是來自一個問題“為什么我打的jar包沒有注解?”,帶着這個疑問查了一圈資料,原來問題主要是在沒有將源碼中的注釋進行抽取打包,自然我們在引用jar包的時候,無法獲得注解。

二、讓maven發布帶上注解

這個方法很簡單,只需在build->plugins下面中增加javadoc的插件來打包資源包,這樣打包的時候就會額外增加一個以javadoc結尾的jar包。javadoc的組件添加源碼如下:

<!--配置生成Javadoc包--><plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.4</version>
    <configuration>
        <encoding>UTF-8</encoding>
        <aggregate>true</aggregate>
        <charset>UTF-8</charset>
        <docencoding>UTF-8</docencoding>
    </configuration>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions></plugin>

三、什么是javadoc

javadoc居然可以解決jar包中代碼注釋的問題,那么什么是javadoc呢? 百度百科中的解釋是:javadoc是Sun公司提供的一個技術,它從程序源代碼中抽取類、方法、成員等注釋形成一個和源代碼配套的API幫助文檔。也就是說,只要在編寫程序時以一套特定的標簽作注釋,在程序編寫完成后,通過Javadoc就可以同時形成程序的開發文檔了。 javadoc的注解方式是有一定格式的,常用的注解方式有

標簽 說明 JDK 1.1 doclet 標准doclet 標簽類型
@author 作者 作者標識 包、 類、接口
@version 版本號 版本號 包、 類、接口
@param 參數名 描述 方法的入參名及描述信息,如入參有特別要求,可在此注釋。 構造函數、 方法
@return 描述 對函數返回值的注釋 方法
@deprecated 過期文本 標識隨着程序版本的提升,當前API已經過期,僅為了保證兼容性依然存在,以此告之開發者不應再用這個API。 包、類、接口、值域、構造函數、 方法
@throws異常類名 構造函數或方法所會拋出的異常。
構造函數、 方法
@exception 異常類名 同@throws。 構造函數、 方法
@see 引用 查看相關內容,如類、方法、變量等。 包、類、接口、值域、構造函數、 方法
@since 描述文本 API在什么程序的什么版本后開發支持。 包、類、接口、值域、構造函數、 方法
{@link包.類#成員 標簽} 鏈接到某個特定的成員對應的文檔中。
包、類、接口、值域、構造函數、 方法
{@value} 當對常量進行注釋時,如果想將其值包含在文檔中,則通過該標簽來引用常量的值。
√(JDK1.4) 靜態值域

此外還有@serial、@serialField、@serialData、{@docRoot}、{@inheritDoc}、{@literal}、{@code} {@value arg}幾個不常用的標簽,由於不常使用,我們不展開敘述,感興趣的讀者可以查看幫助文檔。

注釋非常重要,不能隨意增加或者修改成其他內容,否則會只是報錯,打包不通過。如果一個類或者方法前增加了注解,且方法中存如param,return 或者throws時,注解中不添加的話也是會拋出警告的。所以注解要加的清晰易懂且符合規范。更多的關於javadoc的注解使用,可以通過參考資料查看其它更豐富的內容。

雖然javadoc能解決大部分的代碼注釋問題,但像是在代碼方法中的注解呢?這個要是也想分享出來,靠javadoc就比較困難了。

四、引出的另外一個問題,如何讓別人可以通過maven獲取的源碼

伴隨着注釋打包發布的更高需求的打包就是將源碼一同打包。那么如何在maven倉庫發布的時候,可以將自己的源碼發出去呢?這個就需要我們maven的另一個插件了——sources。 和javadoc一樣,只需在build->plugins下面中增加sources的插件來打包資源包,這樣打包的時候就會額外增加一個以sources結尾的jar包。sources的組件添加源碼如下:

<!--配置生成源碼包--><plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions></plugin>

將源碼也打包發布后,對方在調用我們jar報的時候,可以通過IDEA可以手動加載源碼,查看更多的代碼內容,而不是只能通過反編譯的代碼去看,沒有任何的注解,要是代碼質量不是太高的話,對方是很難理清頭緒的。

五、最終效果

打包完成后的樣子

image

maven倉庫中的樣子

image

IDEA中的樣子

image

參考資料

  1. Maven打包生成源碼包和Javadoc包

  2. maven 打包之后為什么 class 文件中沒有注釋了?

  3. 百度百科javadoc

  4. maven下載源代碼,解決中文注釋為亂碼的問題

  5. JavaDOC注釋使用方法


網易雲免費體驗館,0成本體驗20+款雲產品!

更多網易研發、產品、運營經驗分享請訪問網易雲社區


相關文章:
【推薦】 SVN遷移到GIT


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM