Maven <activeByDefault>тег странное поведение - PullRequest
0 голосов
/ 05 сентября 2018

Вот мой файл 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 package , в журналах должно быть wikipedia.pl , но все равно youtube.pl - почему? Это проблема с тегом activeByDefault ?

Когда профили находятся в pom.xml, проблем нет.

1 Ответ

0 голосов
/ 05 сентября 2018

Я думаю, что введение документы https://maven.apache.org/guides/introduction/introduction-to-profiles.html объяснить это. хотя легко не заметить. Профили в файле settings.xml, который вы активируете по умолчанию, включены для всех сборок.

Профили в вашем ПО, которые включены по умолчанию, отключаются, если вы включаете другой:

Этот профиль будет автоматически активен для всех сборок, если другой профиль в том же POM не активирован одним из ранее описанных способов.

и в отношении профилей settings.xml:

Эта опция принимает аргумент, который представляет собой список разделенных запятыми идентификаторов профиля для использования. Если указан этот параметр, профили, указанные в аргументе параметра, будут активированы в дополнение к любым профилям, которые активируются их конфигурацией активации или разделом в файле settings.xml.

Кажется, вы хотите изменить URL для загрузки в зависимости от профиля. Я бы сказал, что это подпадает под рекомендацию «портативные сборки». Любой, кто не разделяет файл settings.xml, не сможет повторить, что делает сборка.

Если вы хотите «спрятать» эти URL-адреса от сборок, чтобы они были доступны только на CI-сервере, вы можете установить разные свойства в одном и том же профиле settings.xml и использовать в профиле два профиля, которые будут устанавливать URI из одно из значений.

Другим решением для вас может быть просто отключение профиля с опцией -P! ProfileId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...