簡體   English   中英

tools.jar 未打包到 maven package 中。 獲取 java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main

[英]tools.jar not packaged into the maven package. Getting java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main

我創建了一個 maven 項目,該項目需要 tools.jar 被包括在內。 我已將 jar 添加到 lib 文件夾中,並在 pom.xml 中包含以下內容。

<dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <scope>system</scope>
            <version>1.8.0</version>
            <systemPath>${project.basedir}\src\lib\tools.jar</systemPath>
</dependency>

當還添加了以下插件來為項目創建可執行 jar。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>umlparser.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

我已經使用“mvn clean package assembly:single”構建了 jar 這已經創建了一個名為 myproject-jar-with-dependencies 的可執行 jar 文件

但是,當我嘗試使用 java -jar 運行 jar 文件時,它無法獲取工具。jar。 我收到以下錯誤

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main
        at org.umlgraph.doclet.UmlGraph.main(UmlGraph.java:70)
        at umlparser.Main.main(Main.java:19)
Caused by: java.lang.ClassNotFoundException: com.sun.tools.javadoc.Main
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more

但是,當我從 eclipse 將其導出為可運行的 jar 時,它按預期工作。 maven package 有什么問題? 我在這里錯過了什么嗎?

編輯

我試圖從 java_home 而不是項目路徑導入 tools.jar 依賴項。

<dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.8.0_241</version>
            <scope>system</scope>
            <systemPath>${java.home}/../lib/tools.jar</systemPath>
        </dependency>

我仍然遇到同樣的問題。

注意:我的程序中沒有使用 tools.jar。 我包含的 jars 之一正在使用它 - “UMLGraph.jar”。

您添加的com.sun:tools依賴項具有system scope。 provided的和system范圍的依賴項將不包含在此類打包的工件中。

特別是在這種情況下,您實際上也不應該這樣做,因為這個 jar 是您的 JDK 的一部分。 您的 jar 的用戶將擁有一個 JDK/JRE 來運行代碼,如果您包含 jar tools ,您很可能會與他們的 JDK/JRE 發生沖突,而您真的不想這樣做。

話雖這么說,您可能可以嘗試將dependencySetsystemscope一起使用,但我真的不建議這樣做(即使它成功了)。

我假設在您運行此 jar 的系統上,您的PATH中根本沒有 JDK,而只有 JRE。 如果你解決了這個問題,你不應該做任何這種非常規的黑客攻擊。

暫無
暫無

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

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