我的理解是,当使用-P选项显式设置配置文件时,它是独占的,无论发生什么情况,该配置文件都应该被激活。
在我的例子中,在运行命令mvn clean compile -Pcross-compile之后,cross-compile配置文件被忽略,build-linux-amd64被激活。
这里发生了什么,为什么没有调用cross-compile?
我的配置文件配置如下:
<profiles>
<!-- Cross-compile profile (can only be run under linux os) -->
<profile>
<id>cross-compile</id>
<properties>
<current-os>linux</current-os>
<current-arch>amd64</current-arch>
<crossCompile>true</crossCompile>
<build-target>native-build-cc-all</build-target>
</properties>
<build>
<plugins>
<!-- Enforcer: Make sure this can only be run from the Linux OS -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-os</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireOS>
<name>Linux</name>
<family>unix</family>
<arch>amd64</arch>
</requireOS>
</rules>
<failFast>true</failFast>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- BUILD PROFILE: Linux - x86_64/amd64 -->
<profile>
<id>build-linux-amd64</id>
<activation>
<os>
<name>linux</name>
<family>unix</family>
<arch>amd64</arch>
</os>
<property>
<name>!crossCompile</name>
</property>
</activation>
<properties>
<current-os>linux</current-os>
<current-arch>amd64</current-arch>
<build-target>native-build-linux-x86_64</build-target>
</properties>
</profile>
</profiles>发布于 2018-11-07 13:31:01
看来我需要显式地禁用build-linux-amd64配置文件。我用
mvn clean compile -P'cross-compile,!build-linux-amd64'现在,它如预期的那样工作。
发布于 2018-11-08 07:12:42
根据您在Travis日志中提供的内容,我发现您正在运行maven
mvn --settings scripts/settings.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V
在这个步骤中,您编译的代码没有配置文件选项。
然后你就跑
mvn package -Pcross-compile -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true。
在这个打包步骤中,将编译代码。因此,mvn将不再使用概要文件中的编译选项来再次编译代码。
因此,尝试在第一个mvn install命令中添加配置文件选项。
https://stackoverflow.com/questions/53189218
复制相似问题