java application maven项目打自定义zip包实例(推荐)

下面是“Java Application Maven项目打自定义zip包实例”的详细攻略。

简述

在程序的开发过程中,通常需要将代码及其附属资源打包为可执行的程序或库,并进行发布和分发。Maven是一个非常流行的Java包管理工具,可以通过Maven来打包生成自定义的zip包。

步骤

  1. 创建Maven项目

首先需要创建一个简单的Maven项目。使用Maven CLI工具(命令行),进入到项目的根目录并执行以下命令:

mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

执行完该命令后,Maven将根据原型生成一个基本的项目结构。在生成项目成功后,可以使用编辑器打开POM.xml文件进行编辑。以下是一个最简单的POM.xml文件的内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>
  1. 配置Maven插件

在这里我们需要使用Maven的maven-assembly-plugin插件来构建所需的zip包。因此,需要将其添加到项目POM.xml文件的构建插件列表中。

<plugins>
    <!-- 使用maven-assembly-plugin插件,以自定义格式打包目标-->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>com.example.App</mainClass>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <finalName>${project.artifactId}.${project.version}</finalName>
            <!--需要排除生成压缩包内的文件或者文件夹-->
            <excludes>
                <exclude>.git/**</exclude>
                <exclude>README.md</exclude>
            </excludes>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

在这个POM.xml文件中的assembly插件的configuration节点中,指定了archive节点,用来指定生成的压缩文件(该示例中为zip文件)的主入口类。

此时,您可以在项目的根目录结构中创建src/main/java文件夹,并在该文件夹下创建一个App.java文件,并定义一个简单的“Hello World”程序。

public class App {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
  1. 打包

现在,可以执行Maven打包命令来生成zip包了。

mvn package

在Maven打包完成后,可以在target文件夹中找到打包好的zip文件。在这个示例中,zip文件的名称为“my-app-1.0-SNAPSHOT.zip”。

因为前面配置了Maven的maven-assembly-plugin,因此生成的zip包除了包含应用程序的类和文件外,还包括依赖项的JAR文件。这是通过assembly插件的“descriptorRefs”节点和“jar-with-dependencies”值来实现的。

下面是一个生成的ZIP包的目录结构示例:

my-app-1.0-SNAPSHOT.zip
│
├── META-INF
│   ├── MANIFEST.MF
│
├── lib
│   ├── <dep1>.jar
│   ├── <dep2>.jar
│           ...
│   ├── <depN>.jar
│
├── com
│   └── example
│       └── App.class
│
└── README

除此之外,如果需要在zip包中包含其他文件, 可以在Maven的pom.xml文件中的src/main/assembly文件夹中定义Maven-Assembly-plugin的 Assembly XML 文件。 下面是一个简单的示例:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>my-zip</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/src/main/resources</directory>
            <outputDirectory>/resources/</outputDirectory>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <useProjectArtifact>false</useProjectArtifact>
            <unpack>false</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

这个Assembly XML 文件的作用是描述压缩包中的组件及其存储位置。在这个示例中,这个XML文件包含了一个fileSet和一个dependencySet节点。

fileSet节点描述的是存储在zip包中resources文件夹中的资源文件。

dependencySet节点描述的是存储在zip包中的JAR依赖文件。

  1. 示例

下面是两个示例,分别演示了如何将应用程序打包为zip包,同时包含了应用程序本身和图像文件的方式:

示例1

下面是一个POM.xml文件的最简配置,实现了将应用程序打包为zip包:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>

            <!-- 使用maven-assembly-plugin打包目标-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>${project.artifactId}.${project.version}</finalName>
                    <excludes>
                        <exclude>.git/**</exclude>
                        <exclude>README.md</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

在这个示例中,应用程序只包含一个java源文件(App.java),其中的代码用于输出“Hello World!”的字符串。

示例2

在这个示例中,将会生成一个zip包,包含了应用程序及其旁边的一张图像文件。

以下是一个修改后的POM.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>

            <!-- 使用maven-assembly-plugin打包目标-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>${project.artifactId}.${project.version}</finalName>
                    <excludes>
                        <exclude>.git/**</exclude>
                        <exclude>README.md</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <includes>
                <include>**/*.png</include>
            </includes>
        </resource>
    </resources>

</project>

在这个示例中,应用程序包含App.java和一张png格式的图像文件。

public class App {
    public static void main(String[] args) {
        try {
            BufferedImage image = ImageIO.read(App.class.getResource("/image.png"));
            File output = new File("output.png");
            ImageIO.write(image, "png", output);
            System.out.println("Image saved to " + output.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

此外,还需将图片文件放在src/main/resources目录下:

./src/main/resources/image.png

完成这些步骤后,执行以下命令即可打包生成zip包:

mvn package

在Maven执行成功后,将生成一个zip包文件,其中包含了应用程序和图像文件:

./target/my-app-1.0-SNAPSHOT.zip
│
├── META-INF
│   ├── MANIFEST.MF
│
├── lib
│   ├── <dep1>.jar
│   ├── <dep2>.jar
│           ...
│   ├── <depN>.jar
│
├── com
│   └── example
│       ├── App.class
│       └── image.png
│
└── README

以上就是使用Maven生成自定义的zip包的攻略,这个自定义zip包可以在需要进行发布和分发的场景中使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java application maven项目打自定义zip包实例(推荐) - Python技术站

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

相关文章

  • 深入理解java的异常情况

    深入理解Java的异常情况 什么是Java异常 Java异常是在程序执行过程中出现的错误或意外情况。Java中使用异常机制来捕获并处理这种情况。 Java异常可以分为Checked异常和Unchecked异常两种: Checked异常在编译时必须被处理,否则会编译错误。 Unchecked异常则不需要在编译时被处理,但在运行时如果未被处理,将导致程序异常终止…

    Java 2023年5月20日
    00
  • 什么是软引用?

    软引用是一个在Java中用于动态管理内存的概念。它是一种弱化的引用,被设计成用于指向那些后备缓存数据的对象。Java垃圾回收器通常会尽可能长的保留软引用指向的对象,但当系统内存不足时,垃圾回收器会自动释放这些软引用指向的对象。 常见的使用场景包括图片缓存、数据库缓存等,使用软引用可以更灵活地管理缓存数据,同时也可以防止OOM(Out of Memory)错误…

    Java 2023年5月10日
    00
  • Java Unsafe学习笔记分享

    下面是关于“Java Unsafe学习笔记分享”的完整攻略: 什么是Java Unsafe Java Unsafe是一个神奇的类,由于它可以直接操作JVM内存,所以被称为“不安全”类。它提供了强大的内存操作能力,其中包括: 直接操作内存; 获取对象、字段以及数组的偏移量; 绕过访问修饰符,访问私有方法和属性; 其他一些低层级的操作。 由于Unsafe存在一定…

    Java 2023年5月26日
    00
  • Java实现数组转字符串及字符串转数组的方法分析

    下面我将详细讲解Java实现数组转字符串及字符串转数组的方法分析。 1. 数组转字符串 1.1 Arrays.toString() 首先讲解的是通过Arrays.toString()方法把数组转为字符串。这种方法对于一维数组和二维数组都可以使用,示例如下: int[] arr = {1, 2, 3, 4, 5}; String str1 = Arrays.t…

    Java 2023年5月26日
    00
  • Java Springboot自动装配原理详解

    Java Springboot自动装配原理详解 背景 为了提高开发效率并减少代码冗余,Spring Boot引入了自动装配的机制。这使得我们不需要手动添加大量的配置文件和代码,就可以快速搭建一个可运行的应用。 自动装配原理 Spring Boot的自动装配原理就是依赖注入(DI)和控制反转(IOC)的应用。当Spring Boot发现某个Bean被多个模块所…

    Java 2023年5月19日
    00
  • Java实现AOP面向切面编程的实例教程

    下面就来详细讲解“Java实现AOP面向切面编程的实例教程”的完整攻略。 什么是AOP AOP(Aspect Oriented Programming,面向切面编程)是一种编程思想。与传统的OOP(Object Oriented Programming,面向对象编程)相比,AOP注重在运行时动态地将代码切入到不同的对象中进行操作。 AOP的优势 代码复用:将…

    Java 2023年5月18日
    00
  • Spring Boot使用Druid进行维度的统计和监控

    Spring Boot是一种快速开发框架,它提供了许多功能和工具,使得开发者可以快速构建高效的应用程序。Druid是一种开源的数据库连接池和监控平台,它提供了许多功能和工具,使得开发者可以更好地管理和监控数据库连接。在本攻略中,我们将介绍如何使用Spring Boot和Druid进行维度的统计和监控。 以下是两个示例,介绍如何使用Spring Boot和Dr…

    Java 2023年5月15日
    00
  • Java中Exception和Error的区别详解

    Java中Exception和Error的区别详解 在Java中,Exception和Error是两种不同的异常类型,它们的发生和处理方式是不同的。本文将详细讲解Exception和Error的区别及其在程序开发中的应用。 异常的分类 在Java中,异常可以分为两种:受检异常和非受检异常(也称为运行时异常)。 受检异常 受检异常是指在程序运行期间可能出现的异…

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