下面是“Java Application Maven项目打自定义zip包实例”的详细攻略。
简述
在程序的开发过程中,通常需要将代码及其附属资源打包为可执行的程序或库,并进行发布和分发。Maven是一个非常流行的Java包管理工具,可以通过Maven来打包生成自定义的zip包。
步骤
- 创建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>
- 配置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!");
}
}
- 打包
现在,可以执行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依赖文件。
- 示例
下面是两个示例,分别演示了如何将应用程序打包为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技术站