我使用jaxb2 maven插件的xjc目标从一组xsd文件生成Java类。
一个最小的、完整的、可验证的例子是一个带有以下pom的Maven项目。xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>jaxb2-maven-episode-test</artifactId>
<version>1.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<source>${project.basedir}/src/main/resources/</source>
</sources>
<generateEpisode>false</generateEpisode>
</configuration>
</plugin>
</plugins>
</build>
</project>
还有一个名为example的文件。src/main/resources/文件夹中的xsd(任何有效的xsd文件都可以):
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://tempuri.org/PurchaseOrderSchema.xsd"
targetNamespace="http://tempuri.org/PurchaseOrderSchema.xsd"
elementFormDefault="qualified">
<xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="ShipTo" type="tns:USAddress" maxOccurs="2"/>
<xsd:element name="BillTo" type="tns:USAddress"/>
</xsd:sequence>
<xsd:attribute name="OrderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:integer"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
</xsd:schema>
我需要将插件的版本升级到2.5.0。在这个版本中,不建议使用
GenerateEpisode
:
从插件版本2.4开始,将不使用此参数。相反,默认情况下,所有JAXB操作都会生成事件文件。
从插件版本2.4开始,使用参数eposodefilename提供生成的插曲文件的自定义名称(或依赖标准文件名standard_插曲_FILENAME)。
简单地将
version
更改为2.5.0会产生以下构建时错误:
原因:java。伊奥。FileNotFoundException:C:\path to the project\target\generated sources\jaxb\META-INF\jaxb\eposion\u xjc。xjb
通过将
generateEpisode
切换到true
,构建成功,但代码是用一个插曲文件生成的,这是我想要避免的。(作为旁注,这证明了不管文档怎么说,generateEpisode
实际上并没有被忽略)。
如果可能的话,我如何禁用插件版本2.5.0的插曲文件生成?
请尝试使用apache cxf,因为cxf不会生成剧集文件。
https://cxf.apache.org/docs/application-server-specific-configuration-guide.html
经过一些研究,我得出结论,这个功能已经不存在了。
但是,我发现了两种排除剧集文件的解决方法:
使用JAXB2 Maven Plugin(maven-jaxb2-plugin)代替jaxb2-maven-plugin
JAXB2 Maven插件是一个类似的插件,它仍然支持无事件文件生成:
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>${project.basedir}/src/main/resources/</schemaDirectory>
<episode>false</episode> <!-- skips episode file generation -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用单独的插件删除文件
在原始插件之后,可以使用Apache Maven AntRun插件删除文件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<delete>
<fileset dir="${project.build.directory}/generated-sources/jaxb/META-INF/JAXB" includes="episode*.xjb" />
</delete>
</target>
</configuration>
</execution>
</executions>
</plugin>
这需要连接到生成源
阶段,以便在代码生成后直接执行。
我有一个关于插件版本的问题。 当它生成带有目标的报告时: 这表明有很多库都有beta或alpha版本。 问题是,如果此插件的目标是显示每个依赖项的最新版本,我不想将beta/alpha版本用于生产代码。但我也不想手动搜索最后一个稳定版本。 我尝试过“comparisonMethod”选项:numeric、maven等,但都没有成功。 插件“版本”是否有任何想法来显示最新可用的依赖版本,但不包括be
问题内容: 由于传递依赖关系,我的战争被xml-apis和xerces jar填充。我尝试按照参考页上有关maven-war- plugin的说明进行操作,但是它不起作用。 我究竟做错了什么 ?如果很重要,我发现我正在使用的maven-war-plugin版本为2.1-alpha-1 问题答案: 您可以将这些依赖项标记为已提供: 这样,maven会将它们添加到编译类路径中,但不会打包它们。假定它们
试图从我的构建中提取文件夹,但以下操作不起作用: 有什么想法吗?
那么如何防止插件jar进入war文件呢?多谢了。
我正在使用“maven”插件将Gradle构建创建的工件上传到Maven中央存储库。我正在使用类似于以下任务的任务: 然而,此任务创建的POM文件不能正确报告在我的Gradle构建文件中被排除的依赖项。例如: 如何在生成的POM文件中正确管理排除的依赖项?
问题内容: 我有一个项目,需要以下Maven jibx插件: 在jibx插件pom内部,有一个xpp3依赖关系,我想从我的项目构建过程中排除它(由于某种原因,我无法在私有存储库中拥有它)。 有没有一种方法可以配置我的pom.xml(而不是插件pom)来排除该依赖关系? 编辑:我试图从插件pom中删除xpp3依赖项,并且该项目可以成功构建,所以我知道依赖项不是强制性的。 问题答案: 这是一个示例,其