Maven警告“覆盖配置文件:'null'......”

时间:2010-01-12 22:41:42

标签: maven-2 warnings profile pom.xml

以下maven警告的可能原因是什么:

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

我已经尝试评论我的整个默认配置文件,因为警告提到“个人资料”,但这没有帮助。我也试过评论我的报告选项,警告仍然显示出来。

我已经使用-X标志运行了maven,并且在我的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确实是我在我的pom中使用的配置文件的ID。在这一点上,我只有一个配置文件,虽然我希望将来增加更多配置文件。

解决:

彼得对这个问题是正确的。问题源于maven配置文件中没有id元素。就我而言,由于我的miglayout依赖性,正在引入一个pom文件。

通过查看依赖的pom,我发现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 个答案:

答案 0 :(得分:4)

这很容易在Maven 2.2.9中重现。造成这种情况的唯一原因是在同一个pom.xml中定义了两个maven配置文件而没有配置文件ID元素,因此将id视为null。我不知道这样一个配置文件的用例是什么,但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应用“默认”个人资料ID。


最后,在多模块构建中,如果父pom定义了与子节点中id相同的配置文件,则Maven不会发出警告或其他指示。