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系统运行缓慢等问题的排查思路”的完整攻略。 1. 问题定位 首先,我们需要明确具体的问题现象。如果Java系统运行缓慢,可能会有以下一些表现形式: 请求响应时间过长 CPU占用率较高 内存使用率较高 日志输出异常 根据问题现象,我们可以使用以下一些工具来定位问题: 配置管理工具:例如Ansible、Puppet,可以帮助我们收集系统…

    Java 2023年5月24日
    00
  • C# 使用PrintDocument类打印标签的方法

    标题:C# 使用PrintDocument类打印标签的方法 概述 PrintDocument是C#中用于文档打印的类,我们可以使用它来打印标签。在使用PrintDocument类进行标签打印之前,必须先为打印过程编写事件处理程序。本文将会详细讲解C# 使用PrintDocument类打印标签的方法。 步骤 步骤1:设计标签 在设计标签时,需要确定标签的尺寸、…

    Java 2023年6月15日
    00
  • 如何用好Java枚举让你的工作效率飞起来

    如何用好Java枚举让你的工作效率飞起来 1. 枚举的基本使用 定义枚举类型 Java中的枚举是一种特殊的数据类型,可以将一组有限个数的常量定义为枚举类型,比如一周的星期、一年的季节等常量集合。枚举类型通过enum关键字定义。 public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY…

    Java 2023年5月26日
    00
  • java发送短信的实现步骤

    Java发送短信的实现步骤如下: 1. 选择短信服务商 短信服务商是提供短信发送服务的企业,根据自身需求选择适合自己的服务商。常用的国内短信服务商包括阿里云短信、腾讯云通信、网易云信等。 2. 注册并创建短信API 在选择好短信服务商后,需要进行注册和创建短信API。不同的短信服务商提供的注册和创建API的方法可能不同,需要按照相应的文档进行操作。 3. 在…

    Java 2023年5月18日
    00
  • 超级全面的PHP面试题整理集合第1/2页

    下面是详细的攻略: 第1/2页页面介绍 这是一篇关于PHP面试题的文章,分成1/2页展示,第一页包含了50道PHP面试题,第二页包含了另外50道PHP面试题。对于准备面试的PHP开发人员来说是一份不错的复习资料。该页面的排版清晰简洁,每个问题答案都有详细的解释,更新时间较新,适合PHP初级和高级开发人员进行参考。 页面内容分析 该页面的内容主要由50道PHP…

    Java 2023年6月15日
    00
  • 详解Java线程的创建及休眠

    详解Java线程的创建及休眠 线程的概念 Java 线程是一条执行路径,每个线程都是独立的,它们之间不会相互影响,每个线程有自己的计数器、栈和程序计数器。线程是轻量级的,因为创建和销毁线程所需的时间和资源相对较少。 Java线程的创建 Java 线程是通过 Thread 类来实现的。创建线程的方式有两种,分别是: 继承 Thread 类 public cla…

    Java 2023年5月19日
    00
  • java面向对象:API(接口)与集合(ArrayList)

    Java 面向对象:API(接口)与集合(ArrayList)完整攻略 什么是接口 在 Java 编程中,接口是一种抽象类型,它描述了类能做什么而不描述它们是怎么做到的。接口定义了一个类应该有哪些方法,并且不提供这些方法的实现。任何实现这个接口的类都必须提供它定义的方法。 接口的语法如下: // 定义一个接口 public interface Interfa…

    Java 2023年5月26日
    00
  • SpringBoot 如何自定义请求参数校验

    根据您的需求,我会详细讲解 SpringBoot 如何自定义请求参数校验的完整攻略。 1. 简介 SpringBoot默认使用 Hibernate Validator 作为参数校验的实现库(底层实现其实是 JSR-303 Bean Validation 规范)。在进行参数校验时,我们通常会使用一组预定义好的注解,如:@NotNull、@Min、@Max、@S…

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