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

如何配置Maven的application.properties以生成可运行JAR?

关于Maven生成可执行JAR的澄清与解答

致后续读者

我提出此问题时,因误解了链接指南中一处易混淆的内容,未意识到application.properties文件与MANIFEST.MF文件是相互独立的,且后者无论如何都会由Maven自动生成。可查看下方了解生成可运行JAR的方法。

我的问题

我目前正在通过《Getting Started Guide》学习Maven基础,当看到JAR文件中非类资源的章节时,发现缺少关键信息。指南提到,可通过在Maven项目的资源目录下创建application.properties文件来生成清单文件,从而让JAR可执行,但未说明该文件内应填写的内容、格式,以及如何指定主类。

请问:

  • application.properties文件中可填写哪些信息?它的格式是什么?是否为标准Java .properties文件?若是,有哪些合法属性?
  • 如何在构件中指定主类,使得mvn package生成的JAR可通过java -jar命令运行?

我尝试过多种搜索关键词(如"Maven application.properties file")但未得到有用答案,也浏览了入门指南的其余部分及Maven官网的部分内容,但因对Maven了解不足,无法完全理解。


解答

先澄清核心误解

首先要敲黑板:application.properties和MANIFEST.MF完全是两回事!前者是你的应用程序用来读取业务配置的资源文件,和生成可执行JAR的清单文件半毛钱关系都没有。入门指南这里的描述明显误导了你——Maven本来就会自动生成MANIFEST.MF,根本不需要通过application.properties来生成它。

关于application.properties

  • 它就是标准的Java .properties格式文件,用键值对的方式写配置,举个例子:
    app.title=我的第一个Maven应用
    app.version=1.0.0
    db.connection.url=jdbc:mysql://localhost:3306/test_db
    
  • 这个文件的作用是给你的Java代码提供可配置的参数,你可以用JDK自带的Properties类,或者用Spring这类框架来读取里面的内容。只要把它放在src/main/resources目录下,Maven打包时就会自动把它放到JAR的根目录里。

如何生成可执行JAR(指定主类)

要让mvn package生成的JAR能用java -jar直接运行,核心是让Maven在自动生成的MANIFEST.MF里加上Main-Class属性,这里给你两种常用的方法:

方法1:用Maven Jar Plugin配置(基础版)

在项目的pom.xml里添加Jar插件的配置,指定主类的全限定名就行:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <archive>
          <manifest>
            <!-- 替换成你的主类全路径,比如com.example.MyAppMain -->
            <mainClass>你的包名.主类名</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

配置好后执行mvn package,生成的JAR里的MANIFEST.MF就会包含Main-Class条目,直接用java -jar target/你的JAR文件名.jar就能运行。

方法2:用Maven Assembly Plugin(含依赖打包版)

如果你的项目用到了外部依赖,上面的方法生成的JAR不会包含这些依赖,运行时得手动指定类路径。这时候可以用Assembly Plugin打包成一个包含所有依赖的“胖JAR”:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.6.0</version>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>你的包名.主类名</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

执行mvn package后,target目录里会生成一个带-jar-with-dependencies后缀的JAR,这个JAR把所有依赖都打包进去了,直接运行就行,不用管类路径的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:20:19