如何用Maven创建不含Java类、含字体及配置文件的Jar文件
解决方法
一、用Maven构建和原Jar结构一致的字体Jar
情况1:文件放在/src/main/resources目录下
如果字体文件(比如.ttf/.otf)和jasperreports_extension.properties已经在src/main/resources里(比如字体放在src/main/resources/fonts/,配置文件直接在resources根目录),Maven默认会把resources下的所有文件打包到Jar的根目录,和你之前用报表工具生成的Jar结构一致。如果需要自定义打包细节(比如指定Manifest属性),可以配置maven-jar-plugin,示例如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <!-- 这里可以添加Jar的Manifest配置,比如主类,不需要的话可以删掉这段 --> </archive> </configuration> </plugin> </plugins> </build>
运行mvn clean package,就能在target目录拿到目标Jar。
情况2:文件在外部目录(比如/home/user/fonts)
需要先把外部文件复制到Maven的资源目录,再打包,用maven-resources-plugin就能实现:
<build> <plugins> <!-- 把外部的字体和配置文件复制到打包资源目录 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-external-files</id> <phase>process-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/classes</outputDirectory> <resources> <resource> <directory>/home/user/fonts</directory> <includes> <include>**/*.ttf</include> <include>**/*.otf</include> </includes> </resource> <resource> <!-- 假设配置文件在/home/user/config下 --> <directory>/home/user/config</directory> <includes> <include>jasperreports_extension.properties</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> <!-- 打包Jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </build>
运行mvn clean package,外部文件会被复制到target/classes,最终打包进Jar,结构和原Jar一致。
二、移除system scope依赖
把你刚构建的Jar安装到本地Maven仓库或者公司私服,就能用普通依赖引入,不再需要system scope:
- 安装到本地仓库:
执行下面的命令(替换Jar路径为你实际的路径):mvn install:install-file -Dfile=target/my-fonts-1.0.jar -DgroupId=my.group.id -DartifactId=my-fonts -Dversion=1.0 -Dpackaging=jar - 替换原依赖:
删除原来的system scope依赖,改成普通依赖:<dependency> <groupId>my.group.id</groupId> <artifactId>my-fonts</artifactId> <version>1.0</version> </dependency>
这样Maven会自动从本地仓库(或私服)拉取这个依赖,完全符合审计要求。
内容的提问来源于stack exchange,提问作者Frankio1
相关产品推荐
相关产品推荐

