![](/img/trans.png)
[英]java.lang.NoClassDefFoundError: com/sun/tools/javac/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 發生沖突,而您真的不想這樣做。
話雖這么說,您可能可以嘗試將dependencySet
與system
的scope
一起使用,但我真的不建議這樣做(即使它成功了)。
我假設在您運行此 jar 的系統上,您的PATH
中根本沒有 JDK,而只有 JRE。 如果你解決了這個問題,你不應該做任何這種非常規的黑客攻擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.