簡體   English   中英

使用maven-javadoc-plugin,如何加載包含taglet引用的類?

[英]with maven-javadoc-plugin, how to load the class that taglet reference is contained within?

我已經開發了一個自定義javadoc標簽,該標簽使用通過API的反射來獲取有關在其中引用該標簽的類的信息。 它使用“ Class.forName(String) ”加載類。

我能夠使它在Taglet本身的項目中工作,甚至可以使用“ ToolProvider.getSystemDocumentationTool() ”運行集成測試並驗證結果內容。

現在,我已經在我們的nexus服務器中安裝了該工件,並且試圖從使用Maven和maven-javadoc-plugin構建的類中引用它。

當我第一次運行在“ Foo.java”中引用我的標簽的構建時,我在我的標簽代碼中看到一個ClassNotFound異常,說它找不到指定的類。

這告訴我它正在進入我的標簽代碼,但無法加載所涉及類的類文件。 具有諷刺意味的是,它唯一可以通過查找和解析與該類關聯的源文件來實現的。

因此,然后我編輯了maven-javadoc-plugin配置,添加了一個“ additionalDependencies ”塊,指定了包含引用該標記的類文件的工件。

我還設置了“ verbose ”標志,並且在結果輸出中看到它在打印“ search path for class files ”時,在該列表的末尾找到了帶有相關類的工件jar。

但是,我仍然遇到錯誤。

還有什么地方出問題了?

以下是相關代碼的一些摘錄:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.10.4</version>
            <configuration>
                <verbose>true</verbose>
                <additionalDependencies>
                    <additionalDependency>
                        <groupId>our.group.id</groupId>
                        <artifactId>our.artifact.id</artifactId>
                        <version>${current.pom.version}</version>
                    </additionalDependency>
                </additionalDependencies>
                <additionalparam>-Xdoclint:none</additionalparam>
                <taglets>
                    <taglet>
                        <tagletClass>packagepath.taglet.ValidationConstraintsTaglet</tagletClass>
                    </taglet>
                    <taglet>
                        <tagletClass>packagepath.taglet.ValidationConstraintsCombinedTaglet</tagletClass>
                    </taglet>
                </taglets>
                <tagletArtifact>
                    <groupId>our.group.id.taglets</groupId>
                    <artifactId>validationJavadocTaglet</artifactId>
                    <version>0.0.1-SNAPSHOT</version>
                </tagletArtifact>
            </configuration>
            <executions>
                <execution>
                    <id>module-javadoc-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <show>protected</show>
                        <detectLinks>false</detectLinks>
                    </configuration>
                </execution>
            </executions>
        </plugin>

這是Taglet類中代碼的一部分,顯示了包含類的加載:

@Override
public String toString(Tag tag) {
    String  className   = tag.holder().toString();

    StringBuilder   sb  = new StringBuilder();
    sb.append("<dt><b>Validation Constraints</b></dt>");
    sb.append("<dd>");
    sb.append("<table border=1><thead><tr><th>Property</th><th>Message</th></tr></thead>");
    sb.append("<tbody>");

    try {
        Class<?>    clazz   = Class.forName(className);

運行構建時,我看到以下輸出:

Generating C:\...\...\target\apidocs\help-doc.html...
[done in 2593 ms]
[WARNING] Javadoc Warnings
[WARNING] java.lang.ClassNotFoundException: ...Foo
[WARNING] at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[WARNING] at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[WARNING] at java.lang.Class.forName0(Native Method)
[WARNING] at java.lang.Class.forName(Class.java:264)
[WARNING] at ....taglet.ValidationConstraintsTaglet.toString(ValidationConstraintsTaglet.java:69)

我注意到輸出中的以下行(詳細信息已打開):

[search path for class files: C:\Program Files\Java\jdk1.8.0_102\jre\lib\resources.jar,...,C:\...\our.artifact.id\target\our.artifact.id-2.7.0-SNAPSHOT.jar]

我檢查了列表末尾的jar,並驗證了相關的類是否存在。

我確定添加“ additionalDependency”似乎無濟於事。

沒想到的是,重要的是將依賴項添加為另一個“ tagletArtifact”。 我想如果您考慮一下,它就是標記所需的依賴項。 當我為POM本身生成的工件添加GAV時,這終於奏效了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM