【发布时间】:2017-06-24 05:47:56
【问题描述】:
当我尝试为我的 Java Spring Boot 项目运行 Maven 的验证生命周期时,我收到了 NoClassDefFoundError。它使用mvn spring-boot:run 编译得很好,但是当我运行mvn clean verify 时它会失败:
$mvn clean verify -Dsurefire.skip=true -X
...
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.209 sec <<< FAILURE! - in com.fitforger.FitForgerBackendApplicationTests
initializationError(com.fitforger.FitForgerBackendApplicationTests) Time elapsed: 0.005 sec <<< ERROR!
java.lang.NoClassDefFoundError: com/fitforger/model/GymRat
Caused by: java.lang.ClassNotFoundException: com.fitforger.model.GymRat
com.fitforger.model.GymRat 是我的应用程序的类之一。
项目结构:
+----src
+----main
| +----java
| | +----com
| | +----fitforger
| | +----controller
| | | +----GymRatController.java
| | | +----WorkoutNodeController.java
| | +----dao
| | | +----GymRatDAO.java
| | +----exception
| | | +----GymRatCreationFailure.java
| | | +----GymRatExistsException.java
| | | +----GymRatNotFound.java
| | | +----GymRatUpdateFailure.java
| | +----FitForgerBackendApplication.java
| | +----model
| | | +----FitForgerModel.java
| | | +----GymRat.java
| | | +----WorkoutAttribute.java
| | | +----WorkoutNode.java
| | | +----WorkoutNodeTypes.java
| | +----repository
| | +----CouchbaseRepository.java
| | +----FitForgerRepository.java
| +----resources
| +----application.properties
+----test
+----java
| +----com
| +----fitforger
| +----FitForgerBackendApplicationTests.java
| +----GymRatSteps.java
| +----repository
| +----CouchbaseRepositoryTest.java
+----resources
+----com
+----fitforger
+----GymRat.feature
我的 pom.xml 的相关部分:
<build>
<resources>
<resource>
<directory>resources</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<excludes>
<exclude>com.fitforger.FitForgerBackendApplicationTests</exclude>
</excludes>
<skip>${surefire.skip}</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>com.fitforger.FitForgerBackendApplicationTests</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build
【问题讨论】:
-
This(github.com/spring-projects/spring-boot/issues/6254) 看起来与您所面临的相似。你可以试试
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>exec</classifier> </configuration> </plugin> -
这成功了!非常感谢...可能想添加一个一般性回复,以便我可以将其标记为正确。
-
很高兴它成功了。我已将其作为答案移动。
标签: java spring-boot maven