IntelliJ中Maven构建JAR未包含resources文件问题求助
解决方案:Maven构建可执行JAR时包含资源文件
针对你用Maven Profile构建服务端可执行JAR时,resources目录下的config/DBconfig.config未被打包进JAR的问题,以下是无需修改项目结构的解决方法:
1. 检查并修正Maven资源插件配置
首先确保Profile中正确配置了资源目录的包含规则,避免资源被过滤掉。在你的服务端Profile中添加如下配置:
<profile> <id>server</id> <build> <!-- 确保资源文件被复制到target/classes(你已确认这一步没问题,但需确保无排除规则) --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.config</include> <include>config/**</include> </includes> </resource> </resources> <!-- 后续打包插件配置 --> </build> </profile>
2. 配置打包插件(Shade/Assembly)确保资源被包含
根据你使用的可执行JAR打包插件,添加对应的资源包含规则:
方案A:使用maven-shade-plugin(推荐)
如果用Shade插件打可执行JAR,在Profile的插件配置中明确包含资源文件:
<profile> <id>server</id> <build> <!-- 上述resources配置 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 指定服务端主类全路径 --> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.yourpackage.ServerMain</mainClass> </transformer> </transformers> <!-- 强制包含资源文件 --> <filters> <filter> <artifact>*:*</artifact> <includes> <include>**/*.config</include> <include>config/**</include> </includes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile>
方案B:使用maven-assembly-plugin
如果用Assembly插件,在配置中添加资源包含规则:
<profile> <id>server</id> <build> <!-- 上述resources配置 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>server-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <!-- 指定服务端主类全路径 --> <mainClass>com.yourpackage.ServerMain</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- 包含资源文件 --> <includes> <include>**/*.config</include> <include>config/**</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile>
3. 构建并验证
执行构建命令(指定服务端Profile):
mvn clean package -P server
构建完成后,用以下命令检查JAR中是否包含目标资源:
jar tf target/your-server-jar-name.jar | grep DBconfig.config
如果输出config/DBconfig.config,说明资源已成功打包,此时启动JAR即可正常读取配置文件。
内容的提问来源于stack exchange,提问作者Lorenzo
相关产品推荐
相关产品推荐

