Maven项目中如何将Java文件作为资源打包进Jar包?
问题解答
为什么Test.java文件不在Jar包中?
是的,你猜的没错——Maven默认会把.java文件识别为源码文件,哪怕你把它放在src/main/resources目录下,它依然会被Java编译器编译成.class文件,而原始的.java文件不会被复制到输出目录(target/classes),自然也就不会出现在最终的Jar包里。
另外,.txt文件能正常打包是因为Maven资源插件默认包含这类非源码格式的文件,而.java被默认排除,属于源码编译流程的处理对象。
如何将.java文件作为资源打包进Jar?
你需要修改Maven的资源配置,强制让资源插件把.java文件当成资源文件复制到输出目录,具体步骤如下:
在项目的pom.xml中添加<build>节点下的<resources>配置,显式指定要包含.java文件:
<build> <resources> <resource> <!-- 指定资源目录 --> <directory>src/main/resources</directory> <!-- 包含该目录下的所有.java文件,同时保留原本的txt等资源 --> <includes> <include>**/*.java</include> <include>**/*.txt</include> <!-- 可以继续添加其他需要打包的资源格式 --> </includes> </resource> <!-- 如果还有其他资源目录(比如src/test/resources),也可以按需配置 --> </resources> </build>
配置完成后,执行mvn clean package重新打包,你就能在Jar包的对应路径下找到原始的Test.java文件了。
补充说明
- 这个配置只会影响
src/main/resources目录下的.java文件,src/main/java目录下的.java依然会正常编译为.class文件,不会被当成资源打包。 - 如果只想打包特定的某个
.java文件,可以把<include>**/*.java</include>改成<include>path/to/your/Test.java</include>,精准指定文件路径。
内容的提问来源于stack exchange,提问作者user20827241
相关产品推荐
相关产品推荐

