【问题标题】:Maven: How can I get a profile to inherit the dependencyManagement tag from a parent pom?Maven:如何获取配置文件以从父 pom 继承 dependencyManagement 标记?
【发布时间】:2013-01-08 19:17:05
【问题描述】:

我在自己的配置文件中运行wsgen,因为我不希望它在每次构建产品时都运行。但是当我运行它时,我收到一个关于缺少版本的错误:

$ mvn package -P wsgen [INFO] 正在扫描项目... [ERROR] build 无法读取 1 个项目 -> [Help 1] [ERROR] [ERROR] 项目项目-ejb:2.3.15-SNAPSHOT (C:\Projects\MyProject\pom.xml) 有 1 个错误 [错误]
'build.plugins.plugin[org.jvnet.jax-ws-commons:jaxws-maven-plugin].dependencies.dependency.version' 对于 org.glassfish:javax.javaee:jar 丢失。 @ 第 167 行,第 41 列 [ERROR] [ERROR] 要查看错误的完整堆栈跟踪,请重新运行 带有 -e 开关的 Maven。 [错误] 使用 -X 开关重新运行 Maven 启用完整的调试日志记录。 [错误] [错误] 有关更多信息 错误和可能的解决方案,请阅读以下文章: [错误] [帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

这是子 pom(带有配置文件的 pom)的 sn-p:

<packaging>ejb</packaging>
<parent>
    <artifactId>MyProject</artifactId>
    <groupId>project</groupId>
    <version>2.3.15-SNAPSHOT</version>
</parent>
<profiles>
    <profile>
        <id>wsgen</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jax-ws-commons</groupId>
                        <artifactId>jaxws-maven-plugin</artifactId>
                        <version>2.1</version>
                        <executions>
...
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.glassfish</groupId>
                        <artifactId>javax.javaee</artifactId>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</profile>

但是,在父 pom 中,我在 dependencyManagement 标记下定义了这个依赖项及其版本。

我认为正在发生的事情是配置文件没有继承父级的 dependencyManagement 标记,因此它认为依赖项缺少版本号。有没有办法让配置文件从父母那里继承这个?

【问题讨论】:

    标签: java maven maven-3 wsgen


    【解决方案1】:

    dependencyManagementpom 和子 pom 中申请 dependencies。它不适用于 plugins 中的dependencies(至少,这是我在几个插件中注意到的,例如 maven-dependency-plugin)。

    一种可能的解决方案是在您的父 pom 中定义一个属性 (javax.javaee.version) 并在您的 dependencyManagement 和您的 jaxws-maven-plugin 插件中使用它。

    【讨论】:

    • 我认为你是对的,因为当我在配置文件下直接定义一个dependencyManagement标签时,错误并没有改变。感谢您的帮助。
    【解决方案2】:

    您可以使用<pluginManagement>标签在父pom中配置插件,让它成为它的版本号、阶段、目标或其他配置。

    所有继承的 pom 都将具有与父 pom 相同的配置,只要您在子 pom 中声明相同的 &lt;groupId&gt;&lt;artifactId&gt;

    【讨论】:

    • 但是,如果@asgoth 说的是真的,我最终还是会为版本使用一个变量,对吧?
    • @DanielKaplan 可以,但这不是必需的。看看上面链接中的示例。可以看出,子 pom 中的 maven-jar-plugin 没有 &lt;version&gt; 标记(既不是硬编码值,也不是 maven 属性)。
    • 孩子避免版本,但父母需要版本。父 pom 的 &lt;pluginManagement&gt;&lt;dependencyManagement&gt; 都将使用相同的依赖项,我最终会使用一个变量来避免 DRY 违规。至少据我所知。
    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 2019-06-07
    • 2012-12-22
    • 1970-01-01
    • 2012-03-17
    • 2011-11-26
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多