【问题标题】:Gradle and Maven compile my project but I am getting NoClassFoundErrorGradle 和 Maven 编译我的项目,但我收到 NoClassFoundError
【发布时间】:2014-09-10 13:11:47
【问题描述】:

我正在尝试编译使用 Gradle 和 Maven 的项目。该项目使用我本地 Maven 存储库中的另一个库。该库在 Gradle 和 Maven 中被引用:

分级:

dependencies{
    compile 'cf.charly1811.java.utils:MimeType:1.0'
}

马文:

<!-- Dependencies -->
<dependencies>
    <dependency>
        <groupId>cf.charly1811.java.utils</groupId>
        <artifactId>MimeType</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

当我尝试使用mvn clean packagegradle clean jar 编译项目时,它会成功。调用 MimeType 类时出现错误:

        Exception in thread "Thread-4" java.lang.NoClassDefFoundError: cf/charly1811/java/utils/MimeType at cf.charly1811.java.web.RequestHandlerThread.process(RequestHandlerThread.java:120)
            at cf.charly1811.java.web.RequestHandlerThread.handleRequest(RequestHandlerThread.java:85)
            at cf.charly1811.java.web.RequestHandlerThread.run(RequestHandlerThread.java:64)
    Caused by: java.lang.ClassNotFoundException: cf.charly1811.java.utils.MimeType
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            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)
            ... 3 more

我不知道是什么导致了这个错误... 请帮忙。

编辑: MimeType pom.xml:

<project>
    <modelVersion>4.0.0</modelVersion>
    <name>MimeType</name>
    <description>Library to easily get the type of a file</description>
    <groupId>cf.charly1811.java.utils</groupId>
    <artifactId>MimeType</artifactId>
    <version>1.0</version>

    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>
</project>

HttpServer(主项目)pom.xml

<project>
<modelVersion>4.0.0</modelVersion>

<name>HttpServer</name>
<description>A simple HTTP Server written in JAVA</description>

<groupId>cf.charly1811.java.web</groupId>
<artifactId>HttpServer</artifactId>
<version>1.0</version>

<!-- Dependencies -->
<dependencies>
    <dependency>
        <groupId>cf.charly1811.java.utils</groupId>
        <artifactId>MimeType</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

<!-- License -->
<licenses>
    <license>
        <name>Private use</name>
        <url>http://choosealicense.com/licenses/no-license/</url>
        <comments>This Software is for private use Only</comments>
    </license>
</licenses>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>cf.charly1811.java.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

</project>

编辑 我忘了澄清一件事: 我使用 IntelliJ IDEA。当我尝试使用“运行”编译项目时,它会编译所有内容,但我没有收到此错误。只有当我使用 Gradle 或 Maven 编译项目时才会发生这种情况

【问题讨论】:

  • 请删除您的清单文件并执行 Maven 全新安装。很确定该软件包未在您的清单中导入。如果此问题仍然存在,则手动导入包并调查为什么它不能自行拉入。
  • 我删除了我的 Manifest 文件,重新编译了 MimeType 库并重新编译了我的主项目。仍然得到同样的错误。我已经手动导入了 MimeTYPE 库并再次尝试,现在它正在工作。也许问题来自 MimeType pom 文件?我用图书馆和项目的 pom 文件更新了问题
  • 没有。我认为构建删除您的本地存储库可能是一个问题。从工作空间中删除项目...再次检查并构建它。如果问题仍然存在,那么您需要进一步调查。您是否在 groovy 中使用此导入,这在清单的导入中表现得很奇怪。
  • 我删除了所有 Maven 和 Gradle 文件,为 MimeType 重新创建 pom.xml,重新编译,为 HttpServer 重新创建 pom,添加 MimeType 作为依赖项。结果一样...
  • 尝试添加调试器加载卸载日志并找出问题所在。

标签: java maven intellij-idea gradle


【解决方案1】:

尝试执行mvn clean install,它将尝试编译所有类并尝试将生成的项目jar保存在本地存储库中,如果出现问题,您应该能够解决它,否则发布它会看到

【讨论】:

    【解决方案2】:

    请删除您的清单文件并执行 Maven 全新安装。很确定该软件包未在您的清单中导入。如果此问题继续存在,则手动导入包并调查为什么它不能自行拉入。

    【讨论】:

      【解决方案3】:

      读完NoClassDefFoundError on Maven dependency之后,我注意到了以下内容:

      "默认情况下,Maven 不会在它的 JAR 文件中捆绑依赖项 构建,并且您没有在类路径上提供它们 尝试在命令行执行您的 JAR 文件。这就是为什么 尝试执行您的 Java VM 时找不到库类文件 代码。”

      我认为 Gradle 也是如此

      现在我应该找到一种方法来捆绑我的依赖项。

      编辑 我终于找到了解决方案(Gradle)

      1. 列表项

      创建你的 build.gradle apply以下插件:

      apply plugin:'java'
      apply plugin: 'application'
      
      1. 添加您的依赖项 (See Java Plugin)
      2. 使用此命令编译项目

        gradle clean distZip

      如果你只是想运行你的程序:

      gradle clean run
      

      编辑

      如果您使用 Maven。您可以使用 Apache Maven shade Plugin 将您的依赖项捆绑到 Jar 文件中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 2014-01-11
        • 1970-01-01
        • 2014-01-26
        • 2015-01-07
        • 1970-01-01
        相关资源
        最近更新 更多