我一直在使用maven插件执行顺序和生成的类的打包来打击我的脑袋。
我需要从带有注释的XSD生成pojos,因为我使用的是 maven-jaxb2-plugin ,它使用了binding.xjb(xml文件包含完全分类的字段名称,是要注释的文件,并为生成的pojos添加注释。除此之外,我还有一种从映射文件动态生成 binding.xjb 文件的机制,目的是提供yaml文件格式的映射,而不是一个大的 binding.xjb < / strong>因为它很容易维护一个yml文件,为此我有一个独立的spring启动应用程序,它读取yaml文件并生成binding.xjb文件,我正在使用 exec-maven-plugin 来在 maven-jaxb2-plugin 之前调用我的应用程序,以便之前生成binding.xjb,并且 maven-jaxb2-plugin 可以使用它来注释pojos。
我知道要维护插件执行顺序,必须在同一阶段声明它们,以避免麻烦我正在使用 process-classes 阶段,并借助于此帮助生成pojos带注释。
但问题是生成的类没有打包到jar中,我想从生成的jar文件中排除我的binding.xjb生成逻辑。
我的构建配置如下所示: -
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.abc.GeneratorApp</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>${maven-jaxb2-plugin.version}</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-XautoNameResolution</arg>
<arg>-Xannotate</arg>
</args>
<schemas>
<schema>
<fileset>
<directory>src/main/xsd</directory>
<includes>
<include>PATH-TO-XSD/my.xsd</include>
</includes>
</fileset>
</schema>
</schemas>
<bindings>
<binding>
<fileset>
<directory>src/main/xsd</directory>
<includes>
<include>*.xjb</include>
</includes>
</fileset>
</binding>
</bindings>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.4</version>
</plugin>
<plugin>
<groupId>com.abc.xyz</groupId>
<artifactId>my-api</artifactId>
<version>1.2.3</version>
</plugin>
</plugins>
</configuration>
</plugin>
</plugins>
有人可以指点我误解我正在制作或提出解决此问题的建议,提前谢谢。
答案 0 :(得分:0)
代码生成通常在generate-sources
阶段完成。不确定为什么你喜欢process-classes
。
同一阶段的插件顺序实际上应该是它们在pom.xml
中列出的顺序。因此exec-maven-plugin
应在maven-jaxb2-plugin
之前执行。我在Maven 3的早期版本中有这个问题,应该已经修复了3.0.3 +。
如果没有任何帮助,请将exec-maven-plugin
移至早期阶段,例如generate-sources
和maven-jaxb2-plugin
至process-sources
。