Maven <activebydefault>标签奇怪的行为

时间:2018-09-05 15:37:51

标签: maven build

这是我的settings.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">

  <profiles>
    <profile>
      <id>wiki</id>
      <properties>
        <repo.url>wikipedia.pl</repo.url>
      </properties>
    </profile>
    <profile>
      <id>youtube</id>
      <properties>
        <repo.url>youtube.pl</repo.url>
      </properties>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>
  </profiles>

</settings>

和带有回显的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>Repository url: </echo>
                                <echo>${repo.url}</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.3</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>

当我运行 mvn软件包时,我假设配置文件 youtube 将被激活(日志中的= =显示 youtube.pl )。但是,当我输入 mvn -P Wiki软件包时,它应该是日志中的 wikipedia.pl ,但它仍然是 youtube.pl -为什么? activeByDefault 标签是否有问题?

当配置文件位于pom.xml中时,没有问题。

1 个答案:

答案 0 :(得分:0)

我认为简介文档https://maven.apache.org/guides/introduction/introduction-to-profiles.html对此进行了解释。虽然容易忽略。默认情况下,您激活的settings.xml中的配置文件已针对所有构建启用。

如果您启用其他配置,则pom中默认启用的配置文件将被禁用:

  

除非使用上述方法之一激活同一POM中的另一个配置文件,否则此配置文件将自动对所有版本均有效。

以及关于settings.xml配置文件:

  

此选项接受一个参数,该参数是要使用的配置文件ID的逗号分隔列表。指定此选项后,除了通过其激活配置或settings.xml中的部分激活的任何配置文件之外,还将激活在option参数中指定的配置文件。

似乎您想根据个人资料更改要上传的网址。我认为这属于“便携式产品”的建议。任何不共享settings.xml的人将无法重复构建的工作。

如果您要“隐藏”构建中的这些URL,以使其仅在CI服务器上可用,则可以在相同的settings.xml配置文件中设置不同的属性,并在pom中使用两个配置文件来将uri设置为值之一。

另一种适合您的解决方案可能是使用-P!profileId选项禁用配置文件。