Maven предупреждение "Переопределяющий профиль: 'null' ..." - PullRequest
1 голос
/ 13 января 2010

Каковы возможные причины следующего предупреждения maven:

Overriding profile: 'null' (source: pom) with new instance from source: pom

Я пытался закомментировать весь мой профиль по умолчанию, так как в предупреждении упоминается "профиль", но это не помогло. Я также попытался закомментировать мои варианты отчетов, и предупреждение все еще появляется.

Я запустил maven с флагом -X, и предупреждение появляется сразу после того, как моя зависимость от Hamcrest появляется, но комментирование не устраняет предупреждение.

РЕДАКТИРОВАТЬ: дополнительная информация по запросу:

Вывод из mvn help:active-profiles:

Active Profiles for Project 'com.sophware.XXX:main:jar:0.0.1-SNAPSHOT':

The following profiles are active:

 - default (source: pom)

Вывод из mvn help:all-profiles:

[INFO] Listing Profiles for Project: com.sophware.XXX:main:jar:0.0.1-SNAPSHOT
  Profile Id: default (Active: true , Source: pom)

default - это действительно идентификатор профиля, который я использую в своей помпе. На данный момент у меня есть только один профиль, хотя я ожидаю добавить еще в будущем.

Разрешение:

Питер был прав насчет проблемы. Проблема заключается в том, что в профиле maven отсутствует элемент id. В моем случае файл pom извлекался из-за моей зависимости от miglayout.

Просматривая зависимые помпы, я обнаружил, что miglayout, действительно, не использует id в своих профилях:

   <profile>
        <activation>
            <os>
                <family>windows</family>
                <arch>x86</arch>
            </os>
        </activation>
        <dependencies>
            <dependency>
                <groupId>org.eclipse.swt.win32.win32</groupId>
                <artifactId>x86</artifactId>
                <version>3.3.0-v3346</version>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </profile>

Существует также ряд других профилей, которые также отсутствуют id, каждый из которых вызывает предупреждение.

1 Ответ

4 голосов
/ 13 января 2010

Это легко воспроизвести в Maven 2.2.9. Единственной причиной этого является то, что два профиля maven определены без элемента id профиля в том же файле pom.xml, поэтому идентификаторы обрабатываются как нулевые. Я не знаю, каков вариант использования такого профиля, но Maven 2.2.9 молча допускает существование такого профиля, если, конечно, вы не попытаетесь его переопределить - вы получите упомянутое предупреждение.

Вот простой pom, который воспроизведет ошибку. Обратите внимание на отсутствующий элемент <id> для каждого профиля.

<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>org.apache.maven.its.mngxxxx</groupId>
  <artifactId>parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>parent</name>
  <profiles>
   <profile>
      <activation>
        <property><name>foo</name></property>
      </activation>
    </profile>
    <profile>
      <activation>
        <property><name>foo</name></property>
      </activation>
    </profile>
  </profiles>
</project>

Просто введите mvn -X validate -Dfoo=true, и вы должны увидеть в верхней части вывода предупреждающее сообщение. Это вызвано тем, что второе определение профиля пытается переопределить первое.

Соответствующий код в Maven 2, выдающий это предупреждение, находится в DefaultProfileManager.java строка 123.


В Maven 3 это изменилось. Используя последнюю версию Maven 3.0-alpha-6, вы получаете.

[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[ERROR] profiles.profile.id must be unique but found duplicate profile with id default @ org.apache.maven.its.mngxxxx:parent:1.0-SNAPSHOT, /Users/plynch/dev/apache/maven/core-integration-testing/mytests/mng-xxxx-IT/src/test/resources/mng-xxxx/pom.xml

 at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:285)
 at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:402)
 at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:351)
 at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:171)
 at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104)
 at org.apache.maven.cli.MavenCli.execute(MavenCli.java:422)
 at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157)
 at org.apache.maven.cli.MavenCli.main(MavenCli.java:122)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:592)
 at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
 at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
 at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
 at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
[ERROR]   The project org.apache.maven.its.mngxxxx:parent:1.0-SNAPSHOT (/Users/plynch/dev/apache/maven/core-integration-testing/mytests/mng-xxxx-IT/src/test/resources/mng-xxxx/pom.xml) has 1 error
[ERROR]     profiles.profile.id must be unique but found duplicate profile with id default
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

Также обратите внимание, что пропущенный <id> заставит Maven 3 применить идентификатор профиля «по умолчанию».


Наконец, в многомодульной сборке, если родительский pom определяет профиль с тем же идентификатором, что и у дочернего, нет предупреждений или других указаний, исходящих от Maven.

...