- Maven 使用 assembly 进行打包的方法
Maven 使用 assembly 进行打包的方法是通过配置一个 assembly 插件,在打包时将需要的文件或路径包含进去,生成所需要的压缩包或解压后的文件夹。下面是完整的攻略:
步骤一:在 pom.xml 文件中添加 assembly 插件。
在 pom.xml 中的 build 标签中添加如下内容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
其中,descriptor 标签中配置的是 assembly 描述文件的路径,这里的路径是相对于项目根目录。在执行打包操作时,插件的执行顺序在 package 阶段。
步骤二:添加 assembly 描述文件。
在项目根目录下的 src/main/assembly/ 目录中添加 assembly 描述文件,这个文件用来指定需要包含哪些文件或路径、生成的文件夹名、打包成的压缩包的格式等配置。一个简单的描述文件内容如下:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>example</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}.jar</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<includes>
<include>*:jar</include>
</includes>
<useProjectArtifact>false</useProjectArtifact>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
其中,id 标签定义了描述文件的名称。formats 标签定义了所生成的压缩包的格式。includeBaseDirectory 标签用来指定是否将所需要的文件或路径包含在一个文件夹中,默认是 true,这里设为 false 是为了方便在根目录中找到所需要的文件。files 标签配置了需要包含哪些文件,dependencySets 标签配置了需要加入的 maven 依赖库。
步骤三:执行打包操作。
执行如下指令,打包就可以自动执行了:
$ mvn clean package
执行后,所生成的压缩包或解压后的文件所在路径为 target 目录下。
- 示例一:打包 web 项目
假如有一个 web 项目,需要将其项目文件、依赖库和配置文件打成 war 包,可以按照以下方式配置 assembly 插件:
在 pom.xml 文件中添加如下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>${project.name}-${project.version}</finalName>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.Main</mainClass>
</manifest>
<manifestEntries>
<Build-Date>timestamp</Build-Date>
</manifestEntries>
</archive>
<webResources>
<resource>
<directory>src/main/webapp</directory>
</resource>
</webResources>
</configuration>
</execution>
</executions>
</plugin>
其中,appendAssemblyId 标签设为 false 可以避免生成的文件名带上 assemblyId,finalName 标签用来定义生成文件的名称,archive 标签用于指定 jar 包的主类和 MANIFEST.MF 文件的内容,webResources 标签定义了 web 项目的源文件夹。
在项目根目录下的 src/main/assembly/ 目录中添加 assembly 描述文件,如下:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>war</id>
<formats>
<format>war</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.war</include>
</includes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>WEB-INF/lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</assembly>
其中,id 标签设为 war,formats 标签设为 war,fileSets 标签中的 fileSet 标签分别配置了所需要包含的文件夹、输出路径和文件类型。
执行如下指令,打包就可以自动执行了:
$ mvn clean package
执行后,所生成的 war 包所在路径为 target 目录下。
- 示例二:打包带有外部配置文件的项目
假如有一个 java 项目,需要将项目所需的配置文件、依赖库和 jar 文件打成 zip 包,并将外部配置文件和 main class 分别放在根目录和 lib/ 目录下,可以按照以下方式配置 assembly 插件:
在 pom.xml 文件中添加如下内容:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>${project.name}-${project.version}</finalName>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
</configuration>
</execution>
</executions>
</plugin>
其中,appendAssemblyId 和 finalName 标签配置同上,archive 标签用于指定 jar 包的主类和 MANIFEST.MF 文件的内容,fileSets 标签定义了需要加入的文件。
在项目根目录下的 src/main/assembly/ 目录中添加 assembly 描述文件,如下:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>zip</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</assembly>
其中,id 和 formats 标签配置同上,includeBaseDirectory 标签设为 false,fileSet 标签指定了需要加入的文件夹和输出路径。
执行如下指令,打包就可以自动执行了:
$ mvn clean package
执行后,所生成的 zip 包所在路径为 target 目录下。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:maven 使用assembly 进行打包的方法 - Python技术站