我在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>
答案 0 :(得分:2)
显然maven-jaxb2-plugin
不支持此类功能。 (maven-download-plugin
也不是maven-dependency-plugin
)。
目前我想到了三个解决方案(加上LIttle Ancient Forest Kami评论启发的两个半)[数字反映了我将要做的事情的优先顺序]:
使用支持在作业失败时重试的CI工具(Jenkins等)。 [1]
手工:
将GMavenPlus plugin与脚本... [2]
将Maven AntRun plugin与脚本一起使用... [3]
将Exec Maven plugin与程序一起使用... [5]
...执行下载并重试并将其绑定到项目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
并执行重试的适当参数(url
,outputDirectory
,retryCount
)。将其目标绑定到项目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
,自动添加源目录。