M.R*_*.R. 73 java schema xsd maven-2 jaxb
例:
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/resources/dir1</schemaDirectory>
<schemaIncludes>
<include>schema1.xsd</include>
</schemaIncludes>
<generatePackage>schema1.package</generatePackage>
</configuration>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<schemaDirectory>src/main/resources/dir2</schemaDirectory>
<schemaIncludes>
<include>schema2.xsd</include>
</schemaIncludes>
<generatePackage>schema2.package</generatePackage>
</configuration>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
发生了什么:Maven执行第一个插件.然后删除目标文件夹并创建第二个包,然后该包可见.
我尝试为第一个配置设置target/somedir1,为第二个配置设置target/somedir2.但这种行为并没有改变?有任何想法吗?我不想直接在src/main/java文件夹中生成包,因为这些包是经过处理的,不应与手动创建的类混合使用.
Pas*_*ent 110
我必须指定不同的generateDirectory(没有这个,插件正在考虑文件是最新的,并且在第二次执行期间没有生成任何内容).我建议遵循target/generated-sources/<tool>生成源的约定,以便它们将自动导入您喜欢的IDE中.我还建议声明几个execution而不是两次声明插件(并configuration在每个execution元素内部移动):
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.1</version>
<executions>
<execution>
<id>schema1-generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/dir1</schemaDirectory>
<schemaIncludes>
<include>shiporder.xsd</include>
</schemaIncludes>
<generatePackage>com.stackoverflow.package1</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/xjc1</generateDirectory>
</configuration>
</execution>
<execution>
<id>schema2-generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/dir2</schemaDirectory>
<schemaIncludes>
<include>books.xsd</include>
</schemaIncludes>
<generatePackage>com.stackoverflow.package2</generatePackage>
<generateDirectory>${project.build.directory}/generated-sources/xjc2</generateDirectory>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
通过此设置,我得到以下结果 mvn clean compile
$ tree target/
target/
??? classes
? ??? com
? ? ??? stackoverflow
? ? ??? App.class
? ? ??? package1
? ? ? ??? ObjectFactory.class
? ? ? ??? Shiporder.class
? ? ? ??? Shiporder$Item.class
? ? ? ??? Shiporder$Shipto.class
? ? ??? package2
? ? ??? BookForm.class
? ? ??? BooksForm.class
? ? ??? ObjectFactory.class
? ? ??? package-info.class
? ??? dir1
? ? ??? shiporder.xsd
? ??? dir2
? ??? books.xsd
??? generated-sources
??? xjc
? ??? META-INF
? ??? sun-jaxb.episode
??? xjc1
? ??? com
? ??? stackoverflow
? ??? package1
? ??? ObjectFactory.java
? ??? Shiporder.java
??? xjc2
??? com
??? stackoverflow
??? package2
??? BookForm.java
??? BooksForm.java
??? ObjectFactory.java
??? package-info.java
这似乎是预期的结果.
xme*_*eko 13
您还可以使用JAXB绑定为每个模式指定不同的包,例如
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0" schemaLocation="book.xsd">
<jaxb:globalBindings>
<xjc:serializable uid="1" />
</jaxb:globalBindings>
<jaxb:schemaBindings>
<jaxb:package name="com.stackoverflow.book" />
</jaxb:schemaBindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)
然后只需使用新的maven-jaxb2-plugin 0.8.0 <schemas>和中的<bindings>元素pom.xml.或在指定上最目录<schemaDirectory>,并<bindingDirectory>和<include>你的架构和绑定:
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
<schemaIncludes>
<include>book/*.xsd</include>
<include>person/*.xsd</include>
</schemaIncludes>
<bindingDirectory>src/main/resources</bindingDirectory>
<bindingIncludes>
<include>book/*.xjb</include>
<include>person/*.xjb</include>
</bindingIncludes>
Run Code Online (Sandbox Code Playgroud)
我认为这是更方便的解决方案,因为当您添加新的XSD时,您不需要更改Maven pom.xml,只需将新的XJB绑定文件添加到同一目录即可.
您应该更改它以仅定义插件一次并执行两次执行区域...如下所示...并且应该设置generateDirectory(基于文档)..
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.7.1</version>
<executions>
<execution>
<id>firstrun</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generateDirectory>target/gen1</generateDirectory>
<schemaDirectory>src/main/resources/dir1</schemaDirectory>
<schemaIncludes>
<include>schema1.xsd</include>
</schemaIncludes>
<generatePackage>schema1.package</generatePackage>
</configuration>
</execution>
<execution>
<id>secondrun</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generateDirectory>target/gen2</generateDirectory>
<schemaDirectory>src/main/resources/dir2</schemaDirectory>
<schemaIncludes>
<include>schema2.xsd</include>
</schemaIncludes>
<generatePackage>schema2.package</generatePackage>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在我看来,你正在对抗maven的单一神器规则......可能你应该考虑这个.
我已经解决了:
<removeOldOutput>false</removeOldOutput>
<clearOutputDir>false</clearOutputDir>
<forceRegenerate>true</forceRegenerate>
Run Code Online (Sandbox Code Playgroud)
将此添加到每个配置中;)
这也可以通过为模式指定陈旧文件名而不清除输出目录来实现。默认输出目录自动包含在类路径中,这不太方便。如果我们指定不同的输出目录,则必须注意类路径才能在 IDE 中使用此代码。例如 -
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<quiet>true</quiet>
<verbose>false</verbose>
<clearOutputDir>false</clearOutputDir>
<readOnly>true</readOnly>
<arguments>-mark-generated</arguments>
</configuration>
<executions>
<execution>
<id>reportingSchema</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/schema/r17/schemaReporting</schemaDirectory>
<schemaIncludes>
<include>OCISchemaReporting.xsd</include>
</schemaIncludes>
<packageName>com.broadsoft.oci.r17.reporting</packageName>
<staleFile>${build.directory}/generated-sources/.jaxb-staleFlag-reporting</staleFile>
</configuration>
</execution>
<execution>
<id>schemaAS</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<schemaDirectory>src/main/resources/schema/r17/schemaAS</schemaDirectory>
<schemaIncludes>
<include>OCISchemaAS.xsd</include>
</schemaIncludes>
<packageName>com.broadsoft.oci.r17.as</packageName>
<staleFile>${build.directory}/generated-sources/.jaxb-staleFlag-as</staleFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)