Java7环境下Maven打包后Jar缺失生成类的问题求助
问题分析与解决
你的Jar包仅包含META-INF目录和Manifest文件,核心原因是生成的Java源码未被Maven编译,问题出在代码生成插件的目录配置上:
1. 错误的源码生成目录
你使用cxf-codegen-plugin和maven-jaxb2-plugin时,都将生成的源码输出到target/main/java,但Maven默认仅编译src/main/java目录下的代码,且target属于构建输出目录,不会被编译器主动扫描,同时该路径也不符合Maven标准目录结构,导致生成的源码被忽略。
修复步骤
步骤1:修改代码生成插件的输出目录
将两个插件的源码输出路径改为Maven标准的生成源码目录(各自独立子目录避免冲突),并让Maven识别这些目录:
调整cxf-codegen-plugin配置:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <!-- 修改为标准生成目录 --> <sourceRoot>target/generated-sources/cxf</sourceRoot> <defaultOptions></defaultOptions> <wsdlOptions> <wsdlOption> <wsdl>data/external/wsdls/resourceMgmt.wsdl</wsdl> </wsdlOption> <wsdlOption> <wsdl>data/external/wsdls/customerMgmt.wsdl</wsdl> </wsdlOption> <wsdlOption> <wsdl>data/external/wsdls/customerCompositeView.wsdl</wsdl> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
调整maven-jaxb2-plugin配置:
<plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.13.3</version> <executions> <execution> <id>myabcdvar</id> <goals> <goal>generate</goal> </goals> <configuration> <!-- 修改为标准生成目录 --> <generateDirectory>target/generated-sources/jaxb</generateDirectory> <schemaDirectory>data/external/xsd/Development</schemaDirectory> <removeOldOutput>false</removeOldOutput> <verbose>true</verbose> <excludeTransitive>true</excludeTransitive> <extension>true</extension> <strict>false</strict> <forceRegenerate>true</forceRegenerate> <!-- <bindingDirectory>data/external/binding</bindingDirectory> --> </configuration> </execution> </executions> </plugin>
步骤2:添加插件识别生成的源码目录
在<build><plugins>下加入build-helper-maven-plugin,将生成目录纳入Maven源码扫描范围:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>target/generated-sources/cxf</source> <source>target/generated-sources/jaxb</source> </sources> </configuration> </execution> </executions> </plugin>
步骤3:验证构建结果
先执行mvn clean compile,检查target/classes目录下是否出现编译后的class文件;确认后执行mvn clean package,此时生成的Jar包应包含所有类文件。
补充:如果项目有自定义源码,确保存放在src/main/java目录(Maven默认主源码目录),会被自动编译。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

