2010-01-12 5 views
1

Каковы возможные причины следующего предупреждения Maven:предупреждение Maven «Перекрытие раздел:„нулевой“...»

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

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

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

EDIT: дополнительная информация по запросу:

Выход из 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 действительно идентификатор профиля, который я использую в моем пом. На данный момент у меня есть только один профиль, хотя я ожидаю добавить еще больше в будущем.

Разрешение:

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

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

<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» s, а также, каждый из которых вызывает предупреждение.

ответ

4

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

Вот простая поместья, которая воспроизведет ошибку. Обратите внимание на отсутствующий элемент <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 применить «по умолчанию» идентификатор профиля.


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