Maven中与jar cvf命令功能等效的pom.xml配置方法是什么
正确配置方案
你需要调整资源输出路径,匹配手动执行jar cvf命令时文件直接存放在jar包根目录的结构,完整配置如下:
<build> <resources> <resource> <directory>./</directory> <includes> <!-- 精确匹配根目录下的配置文件 --> <include>report_properties.properties</include> <!-- 匹配net目录及目录下所有层级的文件 --> <include>net/**</include> </includes> <!-- 核心配置:指定资源直接输出到jar包根目录,而非默认的classes目录 --> <targetPath>/</targetPath> </resource> </resources> <plugins> <!-- 如果当前模块没有Java源码需要编译,可添加该配置跳过编译步骤,避免报错 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <executions> <execution> <id>default-compile</id> <phase>none</phase> </execution> <execution> <id>default-testCompile</id> <phase>none</phase> </execution> </executions> </plugin> <!-- 配置最终生成的jar包名和你之前的fonts.jar一致 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <finalName>fonts</finalName> </configuration> </plugin> </plugins> </build>
原配置失效原因
- 你添加的
<sourceDirectory>./</sourceDirectory>是Java源码目录配置,Maven会自动编译该路径下的所有.java文件,如果当前模块没有源码反而会引发报错,不需要保留。 - Maven默认会把resources目录下的文件输出到jar包的
/classes目录下,和你手动打jar时文件存放在根目录的结构不一致,所以需要通过<targetPath>指定输出路径。
配置完成后执行mvn clean install,生成的jar包结构就和你之前手动打包的完全一致。
内容的提问来源于stack exchange,提问作者dawg
相关产品推荐
相关产品推荐

