配置Maven Profile打包target中Java类生成Jar却未包含类的问题
问题原因及解决方法
你的配置存在两个核心问题:
1. 错误指定了打包文件类型
maven-jar-plugin的作用是打包编译后的.class字节码文件,但你在<includes>里配置的target/generated-sources/main/**/*.java是Java源文件路径,插件默认不会将源文件打包进Jar(这也不符合Java程序包的常规打包逻辑)。
2. 生成的源文件未被Maven编译
target/generated-sources/main目录下的Java文件,默认不会被Maven编译插件识别为源文件目录,所以这些源码不会被编译成.class文件,自然无法被打包进Jar。
修正方案
第一步:调整Jar插件配置,打包class文件
将<includes>的路径改为指向编译后的class文件,若要打包所有class文件,配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <includes> <include>**/*.class</include> </includes> <archive> <manifest> <mainClass>com.MyMainClass</mainClass> </manifest> </archive> </configuration> </plugin>
如果仅需打包target/generated-sources/main下源码编译后的class,可根据实际包结构指定路径,比如com/my/package/**/*.class(需对应生成源码的包结构)。
第二步:让Maven识别生成的源文件目录
添加build-helper-maven-plugin,将target/generated-sources/main加入编译源目录,确保源码被编译:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>target/generated-sources/main</source> </sources> </configuration> </execution> </executions> </plugin>
完成上述配置后,执行mvn clean package -P my-jar,生成的Jar中就会包含对应的class文件了。
内容的提问来源于stack exchange,提问作者UserASD
相关产品推荐
相关产品推荐

