Gradle和Maven编译我的项目,但我得到NoClassFoundError

时间:2014-09-10 13:11:47

标签: java maven intellij-idea gradle

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

摇篮:

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

的Maven:

<!-- 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>

EDIT 我忘了澄清一件事: 我使用IntelliJ IDEA。当我尝试使用&#34; Run&#34;来编译项目时它编译了所有内容,但我没有收到此错误。它只发生在我使用Gradle或Maven编译项目时

3 个答案:

答案 0 :(得分:0)

尝试做mvn clean install它将尝试编译所有类并尝试将生成的项目jar保存在本地存储库中如果发生某些问题你应该能够解决它,否则发布它会看到< / p>

答案 1 :(得分:0)

请删除您的清单文件并进行maven clean安装。很确定包没有在您的清单中导入。如果此问题仍然存在,请手动导入软件包,并调查为什么它不会自行引入。

答案 2 :(得分:0)

阅读此NoClassDefFoundError on Maven dependency后,我注意到以下内容:

  

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

我认为对Gradle来说是一回事

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

修改 我终于找到了一个解决方案(Gradle)

  1. 列表项
  2. 创建build.gradle apply以下插件:

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

      gradle clean distZip

    3. 如果您只想运行程序:

      gradle clean run
      

      修改

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