使用Maven打包时包含资源文件和源码到jar的方法

下面我将详细讲解使用Maven打包时包含资源文件和源码到jar的方法。

1. 配置maven-assembly-plugin插件

首先需要在项目的pom.xml文件中添加maven-assembly-plugin插件的配置。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.2.0</version>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
          <configuration>
            <finalName>${project.artifactId}-${project.version}</finalName>
            <appendAssemblyId>false</appendAssemblyId>
            <archive>
              <manifest>
                <mainClass>com.example.Main</mainClass>
              </manifest>
            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <resources>
              <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                  <include>**/*.properties</include>
                </includes>
              </resource>
            </resources>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

上述配置中,包含以下几个重要的配置项。

  • finalName: 指定打包后的文件名。
  • appendAssemblyId: 默认为true,拼接assembly id(assembly id默认为jar-with-dependencies)。
  • manifest: 配置MANIFEST.MF文件中的Main-Class信息,指定程序的入口类。
  • archive: 配置打包后的jar文件内容,包括META-INF文件夹和class文件。
  • descriptorRefs: 指定应该包含哪些资源文件。
  • resources: 指定要打包的资源文件,可以指定文件夹或文件。

2. 示例一

假设我们的项目结构如下所示。

my-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |   `-- com
    |   |       `-- example
    |   |           `-- Main.java
    |   `-- resources
    |       |-- config.properties
    |       `-- log4j.properties
    `-- test
        |-- java
        |   `-- com
        |       `-- example
        |           `-- MainTest.java
        `-- resources
            `-- test.properties

我们需要打包的内容包括src/main/resources文件夹下的所有.properties文件和源码文件。

  1. 在pom.xml中配置maven-assembly-plugin插件。

具体配置如下。

xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>my-app-1.0-SNAPSHOT</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

  1. 执行maven命令进行打包。在项目的根目录下执行以下命令:
mvn package
  1. 打包完成后,在my-app/target文件夹下可以找到my-app-1.0-SNAPSHOT-jar-with-dependencies.jar文件。

  2. 解压缩my-app-1.0-SNAPSHOT-jar-with-dependencies.jar文件,可以看到解压缩后的文件结构如下。

META-INF
org
com
config.properties
log4j.properties

可以看到,config.propertieslog4j.properties已经包含在打包后的jar文件中了。

3. 示例二

假设我们的项目结构如下所示。

my-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |   `-- com
    |   |       `-- example
    |   |           `-- Main.java
    |   `-- resources
    |       |-- images
    |       |   `-- icon.png
    |       `-- messages
    |           `-- welcome.txt
    `-- test
        |-- java
        |   `-- com
        |       `-- example
        |           `-- MainTest.java
        `-- resources
            |-- test.properties
            `-- testData.sql

此时我们的需求是打包src/main/resources文件夹下的所有资源文件以及源码文件。

  1. 在pom.xml中配置maven-assembly-plugin插件。

具体配置如下。

xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>my-app-1.0-SNAPSHOT</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<resources>
<resource>
<directory>src/main</directory>
<filtering>true</filtering>
<includes>
<include>**/*.java</include>
<include>**/*.properties</include>
<include>**/*.png</include>
<include>**/*.txt</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

  1. 执行maven命令进行打包。在项目的根目录下执行以下命令:
mvn package
  1. 打包完成后,在my-app/target文件夹下可以找到my-app-1.0-SNAPSHOT-jar-with-dependencies.jar文件。

  2. 解压缩my-app-1.0-SNAPSHOT-jar-with-dependencies.jar文件,可以看到解压缩后的文件结构如下。

META-INF
org
com
images
messages
test.properties
testData.sql

可以看到,images文件夹中的icon.pngmessages文件夹中的welcome.txt已经包含在打包后的jar文件中了。

以上就是使用Maven打包时包含资源文件和源码到jar的方法的完整攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Maven打包时包含资源文件和源码到jar的方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java Lambda表达式常用的函数式接口

    Java Lambda表达式是函数式编程的核心特性之一,其中,函数式接口是Lambda表达式的基础。函数式接口是指仅包含一个抽象方法的接口,用来表示函数的签名。Java中已经预定义了很多常用的函数式接口,包括Consumer、Supplier、Function、Predicate等。下面我们逐一来介绍这些函数式接口,并提供几个示例说明。 Consumer C…

    Java 2023年5月26日
    00
  • Spring中如何操作JDBC的实现

    Spring中操作JDBC主要有以下三种方式: 使用JdbcTemplate或NamedParameterJdbcTemplate 实现JdbcOperations接口 使用SimpleJdbcInsert或SimpleJdbcCall 下面对每种方式进行详细的讲解。 1. 使用JdbcTemplate或NamedParameterJdbcTemplate …

    Java 2023年5月20日
    00
  • tomcat6下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

    下面是详细讲解“tomcat6下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法”的完整攻略。 问题描述 在使用tomcat6运行jsp页面过程中,有可能会遇到getOutputStream() has already been called for this…

    Java 2023年6月2日
    00
  • javaWeb实现简单文件上传

    下面是“javaWeb实现简单文件上传”的完整攻略。 一、准备工作 在开始之前,需要准备以下工作: 一个支持Servlet、JavaServer Pages(JSP)的JavaWeb环境,如Tomcat、Jetty等。 一个用于上传文件的HTML表单。 编写Java Servlet程序来处理上传文件,并保存在服务器上。 二、HTML表单 HTML表单必须包含…

    Java 2023年5月20日
    00
  • Java BigDecimal基础用法详解

    Java BigDecimal基础用法详解 什么是BigDecimal Java中的float和double类型是不能精确表示十进制数的,这对于很多需要精确计算的场景是不适用的。而BigDecimal是Java提供的一个可以精确表示任意大小和精度的十进制数类。 常用构造方法 BigDecimal(double val):通过一个Double类型的值来构造Bi…

    Java 2023年5月26日
    00
  • Spring Boot 与 Kotlin 使用JdbcTemplate连接MySQL数据库的方法

    当我们需要在Spring Boot应用中使用Kotlin通过JdbcTemplate连接MySQL数据库时,可以参考以下步骤: 1. 添加依赖 我们需要在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifa…

    Java 2023年6月16日
    00
  • 使用java实现日志工具类分享

    下面就为大家详细讲解使用Java实现日志工具类的攻略。实现日志工具类是为了方便我们进行程序的调试和排错,让我们可以更好地了解程序执行过程中的各种信息和异常情况。下面我们来逐步实现这个日志工具类: 1. 思路分析 我们需要实现的日志工具类需要具备以下基本功能: 设置日志级别:可以设置不同的日志级别,包括 debug、info、warning、error、fat…

    Java 2023年5月19日
    00
  • 利用Spring AOP记录方法的执行时间

    利用Spring AOP记录方法的执行时间可以通过以下步骤实现: 1. 添加依赖 在pom.xml文件中添加Spring AOP的依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</arti…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部