我有一个JavaEE,Maven应用程序。在这个应用程序中,我使用从XSD生成的类,以及通过Mapstruct生成的映射器。了解Maven生命周期
在我的EJB模块,将Maven构建应做到以下几点:
- 通过JAXB2 - Maven的插件生成XSD的Java类
- 通过 添加这些生成的类源文件夹构建辅助-行家-插件,因为:
- 行家处理器的插件生成Mapstruct映射器即时通过产生-mapstruct映射器,它使用这些XSD生成的类
- 最后加上这些mapper实现该人士透露plementions文件夹还
不幸的是,它并没有为我工作。这是EJB的pom.xml的插件部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>${version.jaxb2-maven-plugin}</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
<packageName>com.my.project</packageName>
<catalog>src/main/resources/xsd/CustomCatalog.xml</catalog>
<xjbSources>
<xjbSource>${project.basedir}/src/main/resources/jaxb2/</xjbSource>
</xjbSources>
<sources>
<source>${project.basedir}/src/main/resources/xsd/applications/MyNewClass.xsd</source>
</sources>
<xsdPathWithinArtifact>my/source/xsds</xsdPathWithinArtifact>
</configuration>
</plugin>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<configuration>
<defaultOutputDirectory>
${project.build.directory}/generated-sources
</defaultOutputDirectory>
</configuration>
<executions>
<execution>
<id>generate-mapstruct-mappers</id>
<phase>compile</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<processors>
<processor>org.mapstruct.ap.MappingProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${version.mapstruct}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${version.mapstruct}</version>
</dependency>
</dependencies>
</plugin>
<!-- attach sources -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>compile</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
这会产生从JAXB类,并投入资源到JAR文件。但生成的Mapper实现不在源代码中。
在eclipse中,我可以将生成的类设置为构建路径的一部分,但生成的JAR不包含mapperimplementations。
如果我改变了插件的相位,maven-processor-plugin会抛出一个找不到simbol错误,而且这个符号是从jaxb生成的类。
感谢您的帮助。
尝试将'build-helper-maven-plugin'声明放在''maven-processor-plugin'声明_before_中。 – Tunaki
相同:映射器实现将不在源 – victorio
您使用哪个版本的'maven-processor-plugin'?你还可以提供其他插件的版本吗?你可以在github上做这种例子吗? – khmarbaise