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

构建可执行JAR有何优势?Ant转Maven后JAR如何便捷运行?

好问题!咱们分两部分来聊:先说说构建可执行JAR的核心优势,再针对你从Ant转Maven后的场景,给出几种更便捷的运行方案。

构建可执行JAR的核心优势
  • 部署零烦恼:不用在目标机器上手动配置一堆依赖路径,一个JAR包就能搞定所有内容,复制粘贴就能部署,尤其适合Docker容器化或者分布式部署场景。
  • 环境绝对一致:打包时把所有依赖都封装进去,彻底避免"在我本地能跑,到测试/生产环境就报错"的问题,依赖版本完全统一。
  • 运行命令极简:不需要手动拼接冗长易错的classpath,直接用java -jar your-app.jar就能启动应用,降低操作失误概率。
  • 独立运行能力:可执行JAR自带所有依赖,不需要目标环境提前安装特定版本的库,甚至可以绑定特定JRE(如果打包时包含的话),实现真正的"开箱即用"。
针对你的Maven项目的便捷运行方案

你现在的情况是mvn install后生成的JAR自带lib文件夹,但需要手动指定classpath才能运行,下面几种方案能帮你解决这个问题:

方案一:打包成"胖JAR"(单文件可执行)

这种方案会把你的项目代码和所有依赖打包到一个JAR里,直接运行即可。推荐两个常用插件:

1. Maven Assembly Plugin

在pom.xml中添加以下配置(记得替换你的主类路径):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version>
      <configuration>
        <archive>
          <manifest>
            <!-- 替换成你的主类全路径 -->
            <mainClass>com.yourcompany.YourMainClass</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行mvn clean package后,target目录下会生成myproject-jar-with-dependencies.jar,直接用这个命令启动:

java -jar target/myproject-jar-with-dependencies.jar

2. Maven Shade Plugin

这个插件比Assembly更灵活,还能处理依赖冲突(比如重命名冲突的类),适合复杂项目。配置示例:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.5.1</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <!-- 替换成你的主类全路径 -->
                <mainClass>com.yourcompany.YourMainClass</mainClass>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行mvn clean package后,target下的myproject.jar本身就是可执行的胖JAR,直接运行:

java -jar target/myproject.jar

方案二:保留依赖分离结构,生成自动启动脚本

如果你不想把所有依赖打包到一个JAR里(比如担心JAR过大),可以用插件生成自动处理classpath的启动脚本,Windows和Linux都能用:

Maven Appassembler Plugin

这个插件会生成包含启动脚本的分发包,自动识别lib目录下的依赖。配置示例:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>appassembler-maven-plugin</artifactId>
      <version>2.1.0</version>
      <configuration>
        <programs>
          <program>
            <!-- 替换成你的主类全路径 -->
            <mainClass>com.yourcompany.YourMainClass</mainClass>
            <!-- 启动脚本的名称 -->
            <name>myapp</name>
          </program>
        </programs>
        <!-- 生成Windows和Linux两种脚本 -->
        <platforms>
          <platform>windows</platform>
          <platform>unix</platform>
        </platforms>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>assemble</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行mvn clean package后,target/appassembler/bin目录下会生成myapp.bat(Windows)和myapp(Linux/Mac),直接运行对应的脚本就能启动项目,完全不用手动配置classpath。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:02:49