我在自己的个人资料中运行wsgen因为我不希望每次构建产品时都运行它。但是当我运行它时,我收到一个关于丢失版本的错误:
$ mvn package -P wsgen [INFO]扫描项目... [错误] build无法读取1个项目 - > [帮助1] [错误] [错误] project project-ejb:2.3.15-SNAPSHOT (C:\ Projects \ MyProject \ pom.xml)有1个错误 [ERROR]
'build.plugins.plugin [org.jvnet.jax -WS-公地:JAXWS-行家-插件] .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):
<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
标记,所以它认为依赖项缺少版本号。有没有办法让配置文件从父级继承?
答案 0 :(得分:3)
dependencyManagement
适用于 pom和child poms 中的dependencies
。它不适用于插件中的dependencies
(至少,这是我在几个插件中注意到的,例如maven-dependency-plugin)。
一种可能的解决方案是在您的父pom中定义一个属性(javax.javaee.version
)并在dependencyManagement
和 jaxws-maven-plugin插件中使用它。
答案 1 :(得分:2)
您可以使用<pluginManagement>标记在父pom中配置插件,让它成为版本号,阶段,目标或其他配置。
所有继承poms将具有与父pom相同的配置,只要您在子poms中声明相同的<groupId>
和<artifactId>
。