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

如何使用Maven将config目录添加到独立应用的Jar清单类路径中

使用Maven构建指定目录结构的独立Java应用

没问题,我来帮你配置Maven实现这个目录结构和Class-Path的需求。你需要结合几个Maven插件来完成依赖复制、资源拷贝和Jar清单的正确配置,下面一步步拆解:

1. 复制依赖到lib目录

首先得用maven-dependency-plugin把项目依赖的Jar包复制到输出目录的lib文件夹下,这样最终打包后依赖会和你的application.jar放在同一目录里。

在pom.xml里添加这个插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <!-- 把依赖复制到target/lib目录 -->
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 配置maven-jar-plugin生成正确的Class-Path

你现有的maven-jar-plugin配置需要调整,要手动添加../config到Class-Path,同时让插件自动添加上依赖的Jar包(注意依赖和application.jar在同一目录,所以直接写Jar文件名即可)。

修改后的配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <!-- 依赖和application.jar同目录,前缀设为空 -->
                <classpathPrefix></classpathPrefix>
                <mainClass>org.conffusion.myapp.Main</mainClass>
            </manifest>
            <!-- 手动添加../config到Class-Path,确保能加载配置文件 -->
            <manifestEntries>
                <Class-Path>../config</Class-Path>
            </manifestEntries>
        </archive>
        <!-- 把生成的application.jar放到target/lib目录 -->
        <outputDirectory>${project.build.directory}/lib</outputDirectory>
    </configuration>
</plugin>

3. 复制config目录到输出根目录

用maven-resources-plugin把项目中存放配置文件的目录(比如src/main/resources/config)复制到target目录根下,这样最终会得到./config/application.properties结构。

添加插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-config-resources</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/config</outputDirectory>
                <resources>
                    <resource>
                        <!-- 替换成你项目中配置文件的实际源目录 -->
                        <directory>src/main/resources/config</directory>
                        <includes>
                            <include>application.properties</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

4. 创建launch.bat

在项目根目录下创建launch.bat,内容如下:

@echo off
java -jar ./lib/application.jar
pause

执行mvn package后,把target目录下的launch.bat、config、lib复制到最终部署目录即可。

完整的pom.xml Build片段

把以上插件整合到你的pom.xml中,完整的build部分大概是这样:

<build>
    <plugins>
        <!-- 复制依赖到lib目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 配置Jar清单和输出目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix></classpathPrefix>
                        <mainClass>org.conffusion.myapp.Main</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>../config</Class-Path>
                    </manifestEntries>
                </archive>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </plugin>

        <!-- 复制配置文件目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-config-resources</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/config</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/resources/config</directory>
                                <include>application.properties</include>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn clean package后,你会在target目录下得到完全符合需求的结构:

target/
├── launch.bat
├── config/
│   └── application.properties
└── lib/
    ├── application.jar
    ├── dependancy1.jar
    └── dependancy2.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:44:04