私はJavaEE、mavenアプリケーションを持っています。このアプリケーションでは、XSD から生成されたクラスと、Mapstruct を介したマッパーを使用します。
私の EJB モジュールでは、maven ビルドは次のことを行う必要があります。
- jaxb2-maven-pluginで XSD から Java クラスを生成する
- これらの生成されたクラスをbuild-helper-maven-pluginによってソース フォルダーに追加します 。
- maven-processor-pluginは、これらの XSD 生成クラスを使用するgenerate -mapstruct-mappersによってMapstructマッパー実装を生成します
- 最後に、これらのマッパー実装もソースフォルダーに追加します
残念ながら、それは私にはうまくいきません。これは、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 はシンボルが見つからないエラーをスローし、シンボルは jaxb から生成されたクラスです。
私を助けてくれてありがとう。