2016-12-05 41 views
0

我的整個pom.xml如下。有了這個pom,我在Eclipse中得到了這個錯誤:「生命週期配置中沒有涉及的插件執行:org.apache.cxf:cxf-java2ws-plugin:3.1.8:java2ws(execution:process-classes,phase:process-classes)」。 儘管如此,它確實工作正常。我的意思是,如果我「mvn clean package install」,我得到所需的輸出wsdl文件。當我拿走pluginManagement時,爲什麼我能夠創建wsdl?

如果我添加了pluginManagement,Eclipse中的錯誤desapears,但我沒有得到所需的wsdl文件,我也沒有得到我的控制檯中的錯誤。我發現的兩個最接近的討論是「Publishing wsdl java M2E plugin execution not covered」和「How to solve "Plugin execution not covered by lifecycle configuration" for Spring Data Maven Builds」,但我不理解它們。據我所看到的,這個想法是改變採取的

"<lifecycleMappingMetadata>...<action><execute/>". 

我直的問題優點是:爲什麼當我帶走pluginManagement不低於我的工程POM?我猜,我不確定是否缺少關於pluginManagement和執行之間關係的基本知識。我的問題中最相關的部分不是什麼與Eclipse的worng(我發現很少人說忽略它)。

我一直在使用pluginManagement,但我從來不知道它爲我的pom添加了什麼額外功能。由於現在使用java2ws失敗,我真的很想知道是否應該在我的pom中添加任何額外的配置,以便通過pluginManagement和goal> java2ws運行它。

<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>grp</groupId> 
    <artifactId>art</artifactId> 
    <packaging>war</packaging> 

    <version>0.0.1-SNAPSHOT</version> 
    <name>art Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <jdk.version>1.8</jdk.version> 
     <cxf.version>3.1.8</cxf.version> 
     <spring.version>4.3.4.RELEASE</spring.version> 
     <!-- <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> --> 
    </properties> 

    <dependencies> 
     <!-- Spring dependencies --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!-- Apache cxf dependencies --> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-frontend-jaxws</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-rt-transports-http</artifactId> 
      <version>${cxf.version}</version> 
     </dependency> 
     <!-- servlet & jsp --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.1.2</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>art</finalName> 
     <!-- <pluginManagement> --> 

      <plugins> 

       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.2</version> 
        <configuration> 
         <source>${jdk.version}</source> 
         <target>${jdk.version}</target> 
        </configuration> 
       </plugin> 

       <plugin> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-java2ws-plugin</artifactId> 
        <version>${cxf.version}</version> 
        <executions> 
         <execution> 
          <id>process-classes</id> 
          <phase>process-classes</phase> 
          <configuration> 

           <className>art.VmxService</className> 

           <outputFile>${project.basedir}/src/main/resources/VmxService.wsdl</outputFile> 
           <genWsdl>true</genWsdl> 
           <verbose>true</verbose> 

           <address>http://localhost:9080/art/VmxService</address> 
          </configuration> 
          <goals> 
           <goal>java2ws</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

      </plugins> 
<!--  </pluginManagement> --> 
    </build> 
</project> 

回答

0

pluginManagement部分提供類似於dependencyManagement部分的用途。它定義了插件及其版本和配置默認值,但實際上並未將它們添加到Maven構建生命週期中。

一旦插件被添加到模塊中,它將從pluginManagement部分獲取配置。

另見:Maven: What is pluginManagement?

因此,如果同一插件的類似的配置在多個模塊使用,你可以將它們彙總到一個地方。如果插件僅用於一個模塊,我更願意直接將它放在構建中。但這兩種方式都有效。

請記住,您還需要將該插件添加到build.plugins中 - 只需將它們插入到pluginManagement中即可。

eclipse中的警告更多地涉及到IDE的生命週期。它與Maven生命週期有一點不同,在某些情況下它不能檢測(或不能)插件應該在什麼時候運行。如果沒有Maven項目,一些插件也無法執行。所以我不確定那個生命週期映射插件試圖解決什麼問題:/

反正:如果你使用maven構建生成這些類並且這對你有用(當你告訴eclipse'build'時沒有這樣做,項目沒有maven)你很好。

我認爲信息(生命週期映射)現在直接插入到插件中並由m2eclipse插件讀取。我在一些插件中看到過這樣的xml文件。所以生命週期映射插件可能不再需要了。

+0

Wemu,你肯定回答了我的問題100%。如果你是Eclipse用戶,最後一個評論,你知道如何引發「eclipse中的警告更多地涉及到你的IDE的生命週期」嗎? – DemeCarvO

+1

對不起,我不熟悉日食的演變。我簡單地忽略了過去的生命週期映射警告。這可能只是某個地方的驗證設置?通常,Eclipse中的每個警告都可以被禁用或優先級改變。 – wemu

相關問題