以下是我的文件:
Pom父母:
<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>my.group</groupId>
<artifactId>my.artifact.pom</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>my.artifact.ws</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<properties>
<!-- test -->
<maven.test.failure.ignore>false</maven.test.failure.ignore>
</properties>
//lot of dependencies...
<!-- PROFILES -->
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<unit-tests.skip>false</unit-tests.skip>
<integration-tests.skip>true</integration-tests.skip>
</properties>
</profile>
<profile>
<id>integration</id>
<modules>
<module>my-module-integration-test</module>
</modules>
<properties>
<unit-tests.skip>true</unit-tests.skip>
<integration-tests.skip>false</integration-tests.skip>
</properties>
</profile>
</profiles>
<!-- PLUGIN -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${encoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
Module-ws pom:
<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>
<artifactId>my.artifact.ws</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>my.group</groupId>
<artifactId>my.artifact.pom</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
//lot of dependencies...
</project>
整合 - 测试pom:
<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>
<artifactId>my.artifact.integration.test</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>my.group</groupId>
<artifactId>my.artifact.pom</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<unit-tests.skip>false</unit-tests.skip>
<integration-tests.skip>true</integration-tests.skip>
</properties>
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>my.artifact.ws</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我的文件夹结构:
my-module
|-- my-module-integration-test
| `-- src
| `-- test
| `-- java
| `-- my
| `-- module
| `-- ws
| `-- rest
| `-- MyTest
`-- my-module-ws
`-- src
`-- main
`-- java
`-- my
`-- module
`-- Application
当我运行mvn clean install -P integration
时,收到消息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project mp-schedule-integration-test: Compilation failure: Compilation failure:
[ERROR] /Users/me/dev/my-module/my-module-integration-test/src/test/java/my/module/ws/rest/MyTest.java:[3,28] cannot find symbol
[ERROR] symbol: class Application
[ERROR] location: package my.module
如果我将Application类放在my-module-integration-test
中的测试结构中,它可以工作(Go Horse)
有人可以帮助我吗?
Ps:名称os模块和项目可能是错误的,只是为了隐藏原始名称。
答案 0 :(得分:11)
- github发布后更新
问题是在pom.xml
模块的mp-schedule-ws
中调用的重新打包spring-boot-maven-plugin。在您的pom.xml中包含spring-boot-maven-plugin
后,它会自动尝试重写存档,以便使用spring-boot:repackage
目标使其可执行。
由于mp-integration-test
包中的依赖关系,mp-schedule-ws/target/mp-schedule-ws-1.0-SNAPSHOT.jar
实际上会在类路径上,但是如果你看一下内部,你会看到它加载了org/springframework/boot/loader/*
个类,你的类将驻留在BOOT-INF
文件夹中,例如BOOT-INF/classes/com/cnova/mpschedule/Application.class
。
如果你把spring-boot-maven-plugin放在评论中,你的构建就像一个 魅力。
要解决此问题,您可以遵循一些策略:
spring-boot-maven-plugin
构建执行绑定到特定的打包配置文件,以便它不会在集成测试配置文件中执行pom.xml
的{{1}}中添加分类器,第一个策略的示例:
mp-schedule-ws
这将为您提供2个罐子:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
第二个策略的另一个示例是在$ ls -al mp-schedule-ws/target/
-rwxr--r-- 1 nick wheel 55188756 Nov 23 06:38 mp-schedule-ws-1.0-SNAPSHOT-exec.jar
-rw-r--r-- 1 nick wheel 20311 Nov 23 06:38 mp-schedule-ws-1.0-SNAPSHOT.jar
模块中定义特定的构建配置文件,例如:
mp-schedule-ws
这给出了:
<profiles>
<profile>
<id>package-application</id>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
为Spring Boot构建可执行jar:
$apache-maven-3.3.9/bin/mvn clean install -P integration
[INFO] mp-schedule ........................................ SUCCESS [ 0.230 s]
[INFO] mp-schedule-core ................................... SUCCESS [ 3.845 s]
[INFO] mp-schedule-ws ..................................... SUCCESS [ 0.563 s]
[INFO] mp-schedule-integration-test ....................... SUCCESS [ 0.721 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.751 s
当然,您可以选择最适合您项目的解决方案策略。
- 旧答案 - 已过时,仅供参考
它适用于maven 3.x,我唯一需要改变的是添加
$apache-maven-3.3.9/bin/mvn clean install -P package-application
[INFO] mp-schedule ........................................ SUCCESS [ 0.255 s]
[INFO] mp-schedule-core ................................... SUCCESS [ 3.822 s]
[INFO] mp-schedule-ws ..................................... SUCCESS [ 0.968 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.396 s
到<version>1.0-SNAPSHOT</version>
,因为您在my.artifact.ws
my.artifact.integration.test
我还在本地个人资料中添加了一个缺少的<dependency>
<groupId>my.group</groupId>
<artifactId>my.artifact.ws</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
开始标记。