首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tools.jar没有打包到maven包中。获取java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main

tools.jar没有打包到maven包中。获取java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main
EN

Stack Overflow用户
提问于 2020-04-23 00:21:58
回答 1查看 580关注 0票数 0

我已经创建了一个需要包含tools.jar的maven项目。我已经将jar添加到lib文件夹中,并在pom.xml中包含了以下内容。

代码语言:javascript
复制
<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。

代码语言:javascript
复制
<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。我收到以下错误

代码语言:javascript
复制
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依赖项。

代码语言:javascript
复制
<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“。

EN

回答 1

Stack Overflow用户

发布于 2020-04-23 10:13:37

您添加的com.sun:tools依赖项有一个system作用域。providedsystem作用域的依赖关系将不包含在这种打包的工件中。

具体来说,在这种情况下,您实际上也应该使用而不是,因为这个jar是作为JDK的一部分来的。jar的用户将有一个JDK/JRE来运行代码,如果您包含了tools jar,那么很可能会导致与他们的JDK/JRE发生冲突,而您真的不想这么做。

话虽如此,您也许可以尝试将dependencySetscope of system结合使用,但我真的不建议您这样做(即使它能做到这一点)。

我假设在运行此jar的系统上,您的PATH上没有JDK,而只有JRE。如果你解决了这个问题,你就不应该做任何这种非常规的黑客活动了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61377294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档