我已经创建了一个需要包含tools.jar的maven项目。我已经将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干净包程序集:single“构建了jar,这创建了一个可执行的jar文件,文件名为myproject-jar-具有-依赖项。
但是,当我试图使用java -jar运行jar文件时,它无法获得tools.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包有什么问题?我是不是漏掉了什么?
编辑
我尝试从tools.jar而不是项目路径导入java_home依赖项。
<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不在我的程序中使用。它正在使用的一个罐子,我已经包括- "UMLGraph.jar“。
发布于 2020-04-23 10:13:37
您添加的com.sun:tools依赖项有一个system作用域。provided和system作用域的依赖关系将不包含在这种打包的工件中。
具体来说,在这种情况下,您实际上也应该使用而不是,因为这个jar是作为JDK的一部分来的。jar的用户将有一个JDK/JRE来运行代码,如果您包含了tools jar,那么很可能会导致与他们的JDK/JRE发生冲突,而您真的不想这么做。
话虽如此,您也许可以尝试将dependencySet与scope of system结合使用,但我真的不建议您这样做(即使它能做到这一点)。
我假设在运行此jar的系统上,您的PATH上没有JDK,而只有JRE。如果你解决了这个问题,你就不应该做任何这种非常规的黑客活动了。
https://stackoverflow.com/questions/61377294
复制相似问题