在maven中处理xsd依赖项时抛出IOException

时间:2016-04-10 17:31:04

标签: maven xsd jaxb maven-jaxb2-plugin

我在maven构建期间处理.xsd文件时遇到问题。 我使用jaxb2插件,但我必须从我的.xsd文件下载外部依赖项。问题是这些依赖项(.xsd)来自环境,这是不稳定的,而且我的构建经常失败,因为maven无法下载xsd文件。如何配置jaxb插件强制他尝试下载xsd几次以防止构建失败?

我的pom.xml配置的一部分:

 <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 个答案:

答案 0 :(得分:2)

显然maven-jaxb2-plugin不支持此类功能。 (maven-download-plugin也不是maven-dependency-plugin)。

目前我想到了三个解决方案(加上LIttle Ancient Forest Kami评论启发的两个半)[数字反映了我将要做的事情的优先顺序]:

  • 使用支持在作业失败时重试的CI工具(Jenkins等)。 [1]

  • 手工:

    ...执行下载并重试并将其绑定到项目POM中的<!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> </head> <body> <canvas id="myCanvas" width="800" height="400" style="border:1px solid #d3d3d3;"> Your browser does not support the HTML5 canvas tag.</canvas> <p> <button id="zoomIn">+</button> <button id="zoomOut">-</button> <script> $(document).ready(function() { var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); ctx.strokeRect(5, 5, 25, 15); $('#zoomIn').click(function() { ctx.clearRect(0, 0, c.width, c.height); ctx.scale(1.10, 1.10); ctx.strokeRect(5, 5, 25, 15); }); $('#zoomOut').click(function() { ctx.clearRect(0, 0, c.width, c.height); ctx.scale(0.90, 0.90); ctx.strokeRect(5, 5, 25, 15); }); }); </script> </body> </html>阶段。

    • Create a Maven plugin使用generate-resources并执行重试的适当参数(urloutputDirectoryretryCount)。将其目标绑定到项目POM中的maven-download-plugin阶段。 [4]

    • 创建一个generate-resources Maven项目,该项目使用绑定到check-download阶段的maven-download-plugin来下载generate-resources。 [6]

      创建一个包含以下内容的shell脚本(伪代码):

      .xsd

2005年还有一个问题Maven download retry?。未答复。

答案 1 :(得分: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>

至于第一部分,我不认为使用重试,延续和所有其他内容管理下载应该在JAXB2 Maven插件的范围内。

PS。 <{1}} build-helper-maven-plugin/add-source maven-jaxb2-plugin,自动添加源目录。