2016-04-10 24 views
1

我在Maven構建期間處理.xsd文件時出現問題。 我使用jaxb2插件,但我必須從我的.xsd文件下載外部的依賴。問題是這些依賴項(.xsd)來自不穩定的環境,而且我的構建經常失敗,因爲maven無法下載xsd文件。如何配置jaxb插件強制他嘗試下載xsd幾次以防止構建失敗?我的pom.xml配置的在Maven中處理xsd依賴項時拋出IOException

部分:

<plugins> 
      <plugin> 
       <groupId>org.jvnet.jaxb2.maven2</groupId> 
       <artifactId>maven-jaxb2-plugin</artifactId> 
       <configuration> 
        <strict>false</strict> 
        <extension>true</extension> 
        <args> 
         <arg>-Xfluent-api</arg> 
         <arg>-XtoString</arg> 
         <arg>-Xsetters</arg> 
         <arg>-XenumValue</arg> 
        </args> 
        <plugins> 
         <plugin> 
          <groupId>net.java.dev.jaxb2-commons</groupId> 
          <artifactId>jaxb-fluent-api</artifactId> 
          <version>${jaxb.fluentapi.version}</version> 
         </plugin> 
         <plugin> 
          <groupId>org.jvnet.jaxb2_commons</groupId> 
          <artifactId>jaxb2-basics</artifactId> 
          <version>0.9.3</version> 
         </plugin> 

        </plugins> 
        <bindingDirectory>src/main/resources/jaxb</bindingDirectory> 
        <bindingIncludes> 
         <include>bindings.xml</include> 
        </bindingIncludes> 
        <schemas> 
         <schema> 
          <fileset> 
           <!-- Defaults to schemaDirectory. --> 
           <directory>${project.basedir}/src/main/resources/orbeons</directory> 
           <!-- Defaults to schemaIncludes. --> 
           <includes> 
            <include>*.xsd</include> 
           </includes> 
          </fileset> 
         </schema> 
        </schemas> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>generate-resources</phase> 
         <goals> 
          <goal>generate</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>add-source</id> 
         <phase>generate-sources</phase> 
         <goals> 
          <goal>add-source</goal> 
         </goals> 
         <configuration> 
          <sources> 
           <source>${project.basedir}/generated-sources/orbeons</source> 
          </sources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 

回答

2

顯然,maven-jaxb2-plugin不支持這樣的功能。 (並且maven-download-plugin也不是maven-dependency-plugin)。

三種解決方案進入我腦海的那一刻(加兩個半由LIttle Ancient Forest Kami的評論啓發)[數字反映的是什麼,我會做優先級]:

  • 使用CI工具(詹金斯等),支持工作失敗的重試。 [1]

  • 手工:

    ...執行下載並重試並將其綁定到項目POM中的generate-resources階段。

    • Create a Maven plugin與使用maven-download-plugin,並執行重試適當的參數(urloutputDirectoryretryCount)。將其目標綁定到項目POM中的generate-resources階段。 [4]

    • 創建使用綁定到generate-resources階段下載.xsdmaven-download-plugin一個check-download Maven項目。 [6]

      創建包含以下(在僞代碼)一個外殼腳本:

      download: 
          counter++ 
          <check-download project>/mvn generate-resources 
          if error and counter < maxRetryCount goto download 
      
      if not error 
          <your project>/mvn ... 
      else 
          display appropriate error message 
      

還有一個從2005年未答覆的問題Maven download retry?

+1

因爲他們只是在他們意識到會發生什麼時纔將它放在那裏,因爲它不是由Maven本身強制執行的(沒有檢查或使用它會造成失敗),也沒有人閱讀文檔,對嗎? ;-)至於其他選項:antTask和/或exec Maven電話? –

+0

@LiettleAncientForestKami「_nobody reading docs_」 - 非常正確!不幸。螞蟻?真?通過Maven,我們幸運地擺脫了Ant/Ivy的配置冗長,現在我們將在那裏再次介紹它? ;)順便說一句,我已經第一次在你的個人資料中讀到了「_Javavore_」這個詞。我喜歡它!推動你到1000。 –

+1

*順便說一句:我不知道爲什麼插件不尊重「粗略粗體字母」中提到的「插件命名約定和Apache Maven商標」。* 請閱讀[this](https://github.com/highsource/maven- JAXB2-插件/問題/ 26#issuecomment-66928927)。這個插件在這個命名約定建立之前很久就被命名了。重命名現在會損害社區。所以Apache可以免費給我發送一封停止信函,然後我會關閉這個項目,然後我會厭倦這個「你不尊重我們的會議」的欺凌行爲。 – lexicore

2

作者maven-jaxb2-plugin在這裏。

這裏有兩個部分:管理外部資源的下載和編譯模式,重寫「本地」文件的「外部」鏈接。

第一個(管理下載)不在maven-jaxb2-plugin的範圍內,第二個由 catalogs支持。

總之,你可以創建一個目錄文件是這樣的:

REWRITE_SYSTEM "http://www.w3.org" "w3c" 

或者這樣:

REWRITE_SYSTEM "http://schemas.opengis.net" "maven:org.jvnet.ogc:ogc-schemas:jar::!/ogc" 

,並使用此文件來「改寫」絕對鏈接到內Maven的本地文件或資源文物:

<configuration> 
    <catalog>src/main/resources/catalog.cat</catalog> 
</configuration> 

至於第一部分,我不認爲用重試來管理下載,連續ns和其他所有東西都應該在JAXB2 Maven插件的範圍內。

ps。您不需要build-helper-maven-plugin/add-sourcemaven-jaxb2-plugin,源目錄會自動添加。