You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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:

  1. 安装到本地仓库:
    执行下面的命令(替换Jar路径为你实际的路径):
    mvn install:install-file -Dfile=target/my-fonts-1.0.jar -DgroupId=my.group.id -DartifactId=my-fonts -Dversion=1.0 -Dpackaging=jar
    
  2. 替换原依赖:
    删除原来的system scope依赖,改成普通依赖:
    <dependency>
        <groupId>my.group.id</groupId>
        <artifactId>my-fonts</artifactId>
        <version>1.0</version>
    </dependency>
    

这样Maven会自动从本地仓库(或私服)拉取这个依赖,完全符合审计要求。

内容的提问来源于stack exchange,提问作者Frankio1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:06:23