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

Java如何将JAR包生成到源码、资源所在目录外的指定文件夹

操作方法

所有操作基于你给出的目录结构基准:

项目根目录
├─ f1
│  └─ ft1
│     └─ ft2
│        └─ ft3  # Java源码存放路径
└─ f2
   ├─ ft1  # 依赖CSV文件存放路径
   └─ ft2  # JAR目标输出路径

根据你使用的打包方式不同,对应操作如下:

1. 无构建工具,直接命令行打包

  • 先进入源码所在目录,编译时把CSV依赖路径加入classpath,避免资源找不到:
cd f1/ft1/ft2/ft3
javac -cp ../../../../f2/ft1 *.java
  • 执行jar打包命令时,直接指定输出文件的完整路径为f2/ft2下的目标文件即可,不需要把JAR生成在源码目录再手动移动:
jar cvfe ../../../../f2/ft2/your-app.jar 你的主类全类名 *.class

路径说明:上述命令里的相对路径是从当前所在的ft3目录计算的,你也可以直接填f2/ft2的绝对路径,不会出现路径匹配错误。如果不需要把CSV打进JAR,后续启动JAR时把f2/ft1加入classpath即可正常读取依赖文件。

2. Maven项目打包

直接修改项目根目录下的pom.xml,在build配置块中指定构建输出目录为目标路径,执行打包命令后JAR会自动输出到对应位置,不需要额外操作:

<build>
    <!-- 直接指定构建输出的根目录为f2/ft2,路径可写相对路径或绝对路径 -->
    <directory>../../f2/ft2</directory>
    <finalName>your-app</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>你的主类全类名</mainClass>
                    </manifest>
                </archive>
                <!-- 可选:如果要把f2/ft1下的CSV文件打进JAR,添加以下资源配置 -->
                <resources>
                    <resource>
                        <directory>../../../f2/ft1</directory>
                        <includes>
                            <include>*.csv</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后正常执行mvn clean package,生成的JAR就会直接存放在f2/ft2路径下,不会出现在f1的源码目录树中。

3. Gradle项目打包

修改项目下的build.gradle文件,在jar任务配置中直接指定输出目录:

jar {
    // 指定JAR输出到f2/ft2路径,支持相对路径/绝对路径
    destinationDirectory = file("${rootDir}/../../f2/ft2")
    archiveFileName = "your-app.jar"
    manifest {
        attributes 'Main-Class': '你的主类全类名'
    }
    // 可选:如果要把f2/ft1下的CSV打进JAR,添加以下配置
    from("${rootDir}/../../f2/ft1") {
        include "*.csv"
    }
}

配置完成后执行gradle jar,生成的JAR会直接输出到目标路径。

运行注意:如果没有把CSV打进JAR,启动时需要把f2/ft1加入classpath才能正常读取依赖,启动命令参考:
java -cp f2/ft2/your-app.jar:f2/ft1 你的主类全类名


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:26