1

以下 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.xml 中使用的配置文件的 id。在这一点上,我只有一个配置文件,尽管我希望将来会添加更多。

解析度:

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

在查看依赖 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',每个配置文件都会导致出现警告。

4

1 回答 1

4

这在 Maven 2.2.9 中很容易重现。唯一的原因是在同一个 pom.xml 中定义了两个没有配置文件 id 元素的 maven 配置文件,因此 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.mnggxxx</groupId>
  <artifactId>父级</artifactId>
  <version>1.0-SNAPSHOT</version>
  <包装>pom</包装>
  <name>父母</name>
  <个人资料>
   <个人资料>
      <激活>
        <property><name>foo</name></property>
      </激活>
    </profile>
    <个人资料>
      <激活>
        <property><name>foo</name></property>
      </激活>
    </profile>
  </profiles>
</项目>

只需键入mvn -X validate -Dfoo=true,您应该会在输出顶部附近看到警告消息。这是由于第二个配置文件定义试图覆盖第一个。

Maven 2 中发出此警告的相关代码位于DefaultProfileManager.java第 123 行。


在 Maven 3 中,这种情况发生了变化。使用你得到的最新的 maven 3.0-alpha-6。

[错误] 构建无法读取 1 个项目 -> [帮助 1]
org.apache.maven.project.ProjectBuildingException:处理 POM 时遇到了一些问题:
[错误]profiles.profile.id 必须是唯一的,但发现重复配置文件的 id 默认为 @ org.apache.maven.its.mngxxxx:parent:1.0-SNAPSHOT, /Users/plynch/dev/apache/maven/core-integration-测试/mytests/mng-xxxx-IT/src/test/resources/mng-xxxx/pom.xml

 在 org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:285)
 在 org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:402)
 在 org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:351)
 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:171)
 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104)
 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:422)
 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157)
 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:122)
 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 在 java.lang.reflect.Method.invoke(Method.java:592)
 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
[错误] 项目 org.apache.maven.its.mngxxxx:parent:1.0-SNAPSHOT (/Users/plynch/dev/apache/maven/core-integration-testing/mytests/mng-xxxx-IT/src/test/资源/mng-xxxx/pom.xml) 有 1 个错误
[错误]profiles.profile.id 必须是唯一的,但发现重复的配置文件,id 为默认值
[错误]
[错误]
[错误] 有关错误和可能的解决方案的更多信息,请阅读以下文章:
[错误] [帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

另请注意,缺少<id>将导致 Maven 3 应用“默认”配置文件 ID。


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

于 2010-01-13T16:57:12.207 回答