You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让jaxb2-maven-plugin 2.3将Bean与META-INF生成在同一目录?

解决jaxb2-maven-plugin生成的sun-jaxb.episode文件位置问题

方案1:将episode文件放到Bean所在包目录

通过配置<episodeFile>参数,直接指定文件输出路径到Bean的包目录下,避免在src/main/java根目录生成META-INF目录。修改后的插件配置如下:

<build>
    <plugins>
        <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>jaxb2-maven-plugin</artifactId>
             <version>2.3</version>
             <executions>
                 <execution>
                 <id>schema-x</id>
                 <goals>
                     <goal>xjc</goal>
                 </goals>
                 <configuration>
                     <xjbSources>
                         <xjbSource>src/main/resources/path/to/file.xjb</xjbSource>
                     </xjbSources>
                     <sources>
                         <source>src/main/resources/path/to/file.xsd</source>
                     </sources>
                     <packageName>x.y.z</packageName>
                     <outputDirectory>${basedir}/src/main/java</outputDirectory>
                     <clearOutputDir>false</clearOutputDir>
                     <!-- 指定episode文件输出到Bean所在包目录 -->
                     <episodeFile>${basedir}/src/main/java/x/y/z/sun-jaxb.episode</episodeFile>
                </configuration>
            </execution>
        </plugin>
    </plugins>
</build>

若希望保留META-INF目录结构,把文件放到src/main/java/x/y/z/META-INF下,只需修改<episodeFile>路径:

<episodeFile>${basedir}/src/main/java/x/y/z/META-INF/sun-jaxb.episode</episodeFile>

方案2:将episode文件移到Maven资源目录(推荐)

遵循Maven规范,把配置类资源放到src/main/resources目录下,避免污染源码目录:

<build>
    <plugins>
        <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>jaxb2-maven-plugin</artifactId>
             <version>2.3</version>
             <executions>
                 <execution>
                 <id>schema-x</id>
                 <goals>
                     <goal>xjc</goal>
                 </goals>
                 <configuration>
                     <xjbSources>
                         <xjbSource>src/main/resources/path/to/file.xjb</xjbSource>
                     </xjbSources>
                     <sources>
                         <source>src/main/resources/path/to/file.xsd</source>
                     </sources>
                     <packageName>x.y.z</packageName>
                     <outputDirectory>${basedir}/src/main/java</outputDirectory>
                     <clearOutputDir>false</clearOutputDir>
                     <!-- 指定episode文件输出到资源目录的META-INF下 -->
                     <episodeFile>${basedir}/src/main/resources/META-INF/sun-jaxb.episode</episodeFile>
                </configuration>
            </execution>
        </plugin>
    </plugins>
</build>

不设置时的处理

如果不指定<packageName>,Bean会采用XSD中定义的默认包(比如com.example.schema),只需将<episodeFile>路径对应改为默认包的目录即可,示例:

<episodeFile>${basedir}/src/main/java/com/example/schema/sun-jaxb.episode</episodeFile>

内容的提问来源于stack exchange,提问作者TCH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:50:22