欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven 入门 —— 创建打包脚本

程序员文章站 2022-03-20 09:05:36
...
三种打包插件

 
1、Maven-jar-plugin

maven-jar-plugin 的主要功能在于jar文件内的META-INF文件夹下,生成一个MANIFEST.MF文件,里面记录了可执行文件的一些相关配置。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.2</version>
    <configuration>
        <archive>
            <manifest>
                <addClassPath>true</addClassPath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>Start</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
 
- addClassPath 用于配置是否加载第三方库
- classpathPrefix   用于配置加载三发库的入口
- mainClass 用于配置程序的启动入口
 
可执行jar包和三方依赖包相互分离,需要新建lib目录来存放依赖包,通过maven-dependency-plugin将所需依赖的三方包打包到lib目录下。
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

通过执行copy-dependencies 将依赖的第三方jar打包到<outputDirectory>路径下的文件夹中

 
2、maven-assembly-plugin

支持定制化的打包方式,
1、将不同的文件组合到不同的目录
2、打包成不同的格式
 
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <descriptors>
            <!-- 引入assembly文件位置 -->
            <descriptor>src/main/resources/assembly/package.xml</descriptor>
        </descriptors>
    </configuration>
    <!-- 用于绑定行为 -->
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>assembly</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在定制化的打包插件中,pom文件中主要作用在于引入assembly插件

<?xml version="1.0" encoding="utf-8" ?>
<assembly>
    <id>full</id>
    <formats>
        <format>zip</format>
    </formats>
    <dependecySets>
        <dependencySet>
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib/</outputDirectory>
        </dependencySet>
    </dependecySets>

    <fileSets>
        <fileSet>
            <!--${project.basedir} 表示当前根目录路径 -->
            <directory>${project.basedir}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>CheckFile</include>
            </includes>
        </fileSet>
        <fileSet>
            <!--${project.build.directory} 表示当前跟目录路径 -->
            <directory>${project.build.directory}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

 

 
id 标识符,添加到生成文件名称的后缀符
format 用于定义打包后的文件格式
dependencySet   定制工程依赖 jar 包的打包方式
    ----outputDirectory 将依赖包输出到的文件夹中
    ----useProjectArtifact 是否把项目添加到依赖文件夹下
fileSet   管理一组文件的存放位置
    ----directory 被管理的文件的路径地址
    ----outputDirectory 被管理文件在打包后的输出地址
    ----includes 需要被管理的文件
    ----excludes 不用被管理的文件
 
3、Maven-shade-plugin

 
打成一个胖jar包,即该jar内包含有包含有所有依赖的class文件,通过该种方式打出的jar包可能出现依赖间的冲突。
 
ex:A 依赖于 B ,B 依赖于 C(v1.0)
        A 依赖于 C (v1.1)
那么在引入依赖的时候就出现了冲突
 
Maven 入门 —— 创建打包脚本