java - 在 Maven 中使用执行时出现 NoClassDefFoundError

标签 java maven maven-3 noclassdeffounderror

更新

根据其他人的评论和我自己的测试,这似乎只是 Maven 3.1.1 的问题 - 我已经 logged a bug with codehaus


我已经创建了最小的 maven POM 文件来突出显示问题(见下文)

我正在使用电子邮件服务器插件(用于集成测试)。我可以毫无问题地启动插件:

mvn emailserver:run
[INFO] --- emailserver-maven-plugin:1.1.1:run (default-cli) @ project ---
[INFO] Starting Greenmail mail server...
[INFO] Started Greenmail mail server
[INFO] Waiting for command from client

但是,我已将插件配置为在 integration-test 生命周期之前运行。以这种方式运行时,我得到一个 NoClassDefFoundError:

mvn integration-test
Exception in thread "Thread-1" java.lang.NoClassDefFoundError: com/icegreen/greenmail/util/ServerSetup

当我使用 -X 执行 maven 以查看发生了什么时,在这两种情况下,据我所知,它显示相同的依赖关系树,所以我有点不知所措为什么我得到一个异常,它是通过生命周期阶段启动的。希望有人能提供帮助!

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mytest</groupId>
    <artifactId>project</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>Test Project</name>

    <build>
        <plugins>
            <plugin>
                <groupId>com.btmatthews.maven.plugins</groupId>
                <artifactId>emailserver-maven-plugin</artifactId>
                <configuration>
                    <monitorKey>emailserver</monitorKey>
                    <monitorPort>10025</monitorPort>
                    <serverName>greenmail</serverName>
                    <portOffset>13000</portOffset>
                    <useSSL>false</useSSL>
                </configuration>
                <executions>
                    <execution>
                        <id>run-mail</id>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <phase>pre-integration-test</phase>
                        <configuration>
                            <daemon>true</daemon>
                        </configuration>
                    </execution>
                    <execution>
                        <id>stop-mail</id>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                        <phase>post-integration-test</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Maven 信息:

> mvn -v
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 16:22:22+0100)
Maven home: /opt/apache-maven
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /opt/jdk1.7.0_45/jre
Default locale: en_IE, platform encoding: UTF-8
OS name: "linux", version: "3.11.0-13-generic", arch: "amd64", family: "unix"

最佳答案

NoClassDefFoundError 表示该类在编译时存在于类路径中,但在运行时不存在于类路径中。

所以通过eclipse清理项目,.class文件又会重新生成。在Maven的帮助下再次运行maven项目

关于java - 在 Maven 中使用执行时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20332081/

相关文章:

java - 如何向 IntelliJ IDEA 中的所有 Maven 调用添加代理 VM 参数

java - 检查类型后将父对象作为子对象传递

java - 在构造函数中或声明时初始化类字段?

maven - 将maven的docker镜像与jenkins结合使用-无法创建本地存储库

maven - 如何排除 Maven 继承的子依赖项中的父 pom 依赖项?

maven - 如果无法解决依赖项,如何告诉 Maven 忽略它?

Java CountDownLatch 用于等待 JFrame 处理

java - 使用java读取xml文件来访问每个元素

java - 设置 Maven 的问题

java - PMD - Java 8 - 德米特定律