1.情景展示
在實際工作過程中,我們通常會封裝一些jar包,供內部使用;
我們知道,使用maven默認打包的情況下,是不會生成對應的注釋的(也就是.java文件當中的注釋將無法保留在class當中),這顯然,對於要使用該jar包的開發人員來說是不友好的,如何讓這些注釋原封不動地保留在編譯后的class文件當中呢?
2.具體分析
能不能將java文件編譯成class文件時保留注釋?
我先說結論:不能!
讓我們產生這種錯覺的原因是:開發工具的鍋,當開發工具檢測到有class對應的源碼(java文件)時,會自動將注釋顯示到class當中。
下面具體來看一下:
以eclipse和Map.class為例進行說明
我們可以看到:
此時此刻,我打開的這個Map類,在:D:\oracle-java-1.8-x64\jdk1.8.0_181\jre\lib\rt.jar當中;
我們順着路徑,使用java反編譯工具進行打開,會發現:
一個注釋都沒有!!!
但是,有變相的解決方案,下面會講。
還有一個問題:能不能讓自己的注釋也像jdk的官方類那樣,在鼠標懸浮到具體類時,出現具體的詳細介紹:
也無法實現,只能點擊去看具體的源碼。
3.解決方案
要想通過開發工具看到對應的class文件的注釋,必須有:對應的源碼(java文件);
注釋,只能在java當中可以有,class文件當中沒不存在釋。
所以,要想解決可以看注釋的問題,需要我們:
在將java類打成jar包的同時,生成對應的源碼jar包。
使用maven插件生成java源碼.jar。
在此標簽體里
<build>
<plugins>
</plugins>
</build>
添加:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
重新導包,等待idea從maven倉庫中下載該插件;
沒有問題后,重新打包或者安裝到本地倉庫。
打包成功后,我們可以通過日志,也可以直接查看maven本地倉庫下該jar包目錄下,會增加一個:*-sources.jar
用壓縮軟件,打開這個jar包看一下:
全是java文件(其本質就是將項目源碼拷貝一份,並打成jar包)
這樣,我在開發工具當中,調用javaUtils-1.0-SNAPSHOT.jar包當中的方法時,當我們想要查看該方法的具體解釋時,點進去,開發工具就會自動幫我們打開對應的Java類。
4.擴展
如何根據java類,生成具體的doc說明文檔?
通過maven插件實現。
查看代碼
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<!-- 不讓像@Param 這種后面沒寫值的東西 報錯。-->
<configuration>
<additionalJOption>-Xdoclint:none</additionalJOption>
</configuration>
</execution>
</executions>
</plugin>
在等待idea從maven倉庫中下載完該插件后,如果報錯信息如下:
Cannot resolve symbol 'jar'
菜單欄--》File--》清除idea緩存並重啟。
再進來idea,就不會報錯啦。
然后,選擇:打包或者安裝到本地倉庫。
我們會發現:本地倉庫當中會多出一個*-javadoc.jar。
打開該jar包,這里就是具體的java類對應的用法說明文檔。
打開index.html,我們可查看所有類用法說明。