【问题标题】:tools.jar not packaged into the maven package. Getting java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Maintools.jar 没有打包到 maven 包中。获取 java.lang.NoClassDefFoundError: com/sun/tools/javadoc/Main
【发布时间】:2020-04-23 00:21:58
【问题描述】:

我创建了一个需要包含 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 clean package assembly:single”构建了 jar 这已经创建了一个名为 myproject-jar-with-dependencies 的可执行 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

但是当我将它作为可运行的 jar 从 eclipse 导出时,它按预期工作。 maven包有什么问题?我在这里遗漏了什么吗?

编辑

我尝试从 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。我包含的其中一个罐子正在使用它 - “UMLGraph.jar”。

【问题讨论】:

    标签: java eclipse maven noclassdeffounderror umlgraph


    【解决方案1】:

    您添加的com.sun:tools 依赖项具有system 范围。具有providedsystem 范围的依赖项不会包含在此类打包的工件中。

    特别是在这种情况下,您实际上也应该这样做,因为这个 jar 是您的 JDK 的一部分。你的 jar 的用户将有一个 JDK/JRE 来运行代码,如果你包含 tools jar,你很可能会与他们的 JDK/JRE 发生冲突,你真的不想这样做。

    话虽如此,您或许可以尝试将dependencySetscopesystem 一起使用,但我真的不建议这样做(即使它成功了)。

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

    【讨论】:

    • 感谢您的回复。我在本地运行它并安装了 JDK。 Java_Home 路径也在环境变量中正确设置为 JDK 路径。即使我没有在依赖项中包含 tools.jar,我也会遇到同样的问题。我试图从 java_home 中包含它,但它也没有成功。 &lt;dependency&gt; &lt;groupId&gt;com.sun&lt;/groupId&gt; &lt;artifactId&gt;tools&lt;/artifactId&gt; &lt;version&gt;1.8.0_241&lt;/version&gt; &lt;scope&gt;system&lt;/scope&gt; &lt;systemPath&gt;${java.home}/../lib/tools.jar&lt;/systemPath&gt; &lt;/dependency&gt;
    • 我的程序中也没有使用 tools.jar。我包含的其中一个罐子正在使用它 - “UMLGraph.jar”。
    猜你喜欢
    • 2014-06-08
    • 2013-12-16
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多