仍然对Maven中的目标感到困惑

时间:2014-03-18 15:35:57

标签: java maven

我对Maven中的大多数事情都有所了解,但尝试理解目标非常令人沮丧。主要问题是Maven似乎想要隐藏所有与目标有关的内容。

  • 如果我的插件带有执行,并且此执行具有目标, 目标是否附着在某个特定的其他目标附近?
  • 它如何知道它属于哪个阶段?
  • 是否以某种方式取代了其他目标?

案例:

<plugins>
    <plugin>
        <groupId>org.jvnet.jax-ws-commons</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.3</version>
        <executions>                    
            <execution>
                <id>wsimport-from-jdk</id>
                <goals>
                    <goal>wsimport</goal>
                </goals>
                <configuration>
                    <executable>${tool.wsimport}</executable>
                    <wsdlUrls>
                        <wsdlUrl>http://WorkPC:8080/server-web/AirlineWS?wsdl</wsdlUrl>     
                    </wsdlUrls>
                    <packageName>com.bluewalrus</packageName>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

这是一个 wsImport 目标,可以从Web服务生成工件。它发生在我编译项目之前。这个XML怎么能告诉我这个目标应该在哪里执行?这对我来说似乎并不清楚。

我的意思是我说的是,我希望像“在目标-xyz之后绑定到流程资源”这样的东西。这对我来说似乎有点模糊。

1 个答案:

答案 0 :(得分:6)

不幸的是,pom.xml无法告诉你关于插件目标是如何绑定的所有内容。插件可以定义要绑定的默认生命周期阶段,这不会反映在pom.xml中。查看jaxws-maven-plugin的文档,我看到了wsimport目标的这一行:

  

默认绑定到生命周期阶段:generate-sources。

您可以通过向插件<phase>添加<execution>元素来覆盖要绑定的生命周期阶段。例如,如果您希望在打包工件之前正确运行目标(不确定为什么会这样,但在此示例中请耐心等待),您可以在执行<phase>package</phase>之后指定<id>

我建议您查看官方Maven guide to configuring plugins了解更多详情。

你也想阅读: