2

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

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

这是子 pom 的片段(带有配置文件的 pom):

<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标签,因此它认为依赖项缺少版本号。有没有办法让配置文件从父母那里继承这个?

4

2 回答 2

4

dependencyManagementdependenciespom 和 child poms中申请。它不适用于dependencies插件至少,这是我在几个插件中注意到的,比如 maven-dependency-plugin)。

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

于 2013-01-08T19:24:21.190 回答
2

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

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

于 2013-01-08T21:13:58.960 回答