当前位置: 首页 > article >正文

Maven常用打包方式

Maven常用打包方式

1、maven-assembly-plugin插件打包

作用:将项目中的代码、资源、所有依赖包打成一个jar包。

<build>
    <!--自定义打包方式-->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>org.apache.HelloWorld</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
# 打包
# 生成hello-maven-1.0-SNAPSHOT-jar-with-dependencies.jar和hello-maven-1.0-SNAPSHOT.jar
$ mvn package

打包后会在 target 目录下生成一个 xxx-jar-with-dependencies.jar 文件,这个文件不但包含了自己项目中的

代码和资源,还包含了所有依赖包的内容。所以可以直接通过 java -jar 来运行。

$ java -jar hello-maven-1.0-SNAPSHOT-jar-with-dependencies.jar
Hello Maven

2、maven-shade-plugin插件打包

作用:和maven-assembly-plugin插件的作用一样,将自己项目的代码资源以及依赖第三方的资源一起打成一个

jar包,不过如果项目中用到 Framework,用maven-assembly-plugin这种方式打出来的包运行时会出错,使用

maven-shade-plugin插件可以处理这个问题。

<build>
    <!--自定义打包方式-->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>org.apache.HelloWorld</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
# 打包
# 生成original-hello-maven-1.0-SNAPSHOT.jar和hello-maven-1.0-SNAPSHOT.jar
$ mvn package

执行打包后在 target 目录下会生成两个 jar 包,注意不是 original-xxx.jar 文件,而是另外一个。和 maven-

assembly-plugin 一样,生成的 jar 文件包含了所有依赖,所以可以直接运行。

# 执行
$ java -jar hello-maven-1.0-SNAPSHOT.jar
Hello Maven

3、maven-jar-plugin和maven-dependency-plugin插件打包

作用:将执行jar包和依赖包分开(依赖包放在lib目录下),且位于同一级目录。

3.3.1 插件功能介绍

maven-jar-plugin 用于生成 META-INF/MANIFEST.MF 文件的部分内容:

  • <mainClass>org.apache.HelloWorld</mainClass>:指定MANIFEST.MF中的Main-Class。

  • <addClasspath>true</addClasspath>:会在MANIFEST.MF加上Class-Path项并配置依赖包。

  • <classpathPrefix>lib</classpathPrefix>:指定依赖包所在目录。

maven-dependency-plugin插件:maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,只是生

成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到

<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目录下。

3.3.2 pom文件的配置

<build>
    <!--自定义打包方式-->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>org.apache.HelloWorld</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.8</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>
    </plugins>
</build>

注意:${project.build.directory}/lib 这个配置不需要修改,拿来即用。这个地方是配置依赖包存储的位

置。

# 打包
# 生成hello-maven-1.0-SNAPSHOT.jar
$ mvn package

执行jar包后的结构,执行jar包后会在target目录下生成jar包,并将依赖包拷贝到target/lib目录下。

指定了Main-Class,有了依赖包,那么就可以直接通过java -jar xxx.jar运行jar包。

# 执行
$ java -jar hello-maven-1.0-SNAPSHOT.jar
Hello Maven

4、appassembler-maven-plugin插件打包

作用:实现自动打包成可运行的脚本,还可以跨平台(Windows/linux)。

<build>
    <plugins>
        <!-- 支持java1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <!-- -使用UTF-8编码处理资源文件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>2.0.0</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <repositoryLayout>flat</repositoryLayout>
                <configurationDirectory>conf</configurationDirectory>
                <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
                <copyConfigurationDirectory>true</copyConfigurationDirectory>
                <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
                <assembleDirectory>${project.build.directory}/${project.name}</assembleDirectory>
                <extraJvmArguments>-Xms256m -Xmx1024m -Xss1024k -XX:PermSize=128M
                    -XX:MaxNewSize=256m -XX:MaxPermSize=128m
                </extraJvmArguments>
                <binFileExtensions>
                    <unix>.sh</unix>
                </binFileExtensions>
                <platforms>
                    <platform>windows</platform>
                    <platform>unix</platform>
                </platforms>
                <repositoryName>lib</repositoryName>
                <programs>
                    <program>
                        <mainClass>org.apache.HelloWorld</mainClass>
                        <name>startup</name>
                    </program>
                </programs>
            </configuration>
        </plugin>
    </plugins>
</build>
# 打包
$ mvn package

查看打包结果:

在这里插入图片描述

在这里插入图片描述

进入bin目录下:

在这里插入图片描述

Windows 下执行startup.bat,linux下执行startup.sh。

$ startup.bat
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128M; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
Hello Maven

5、SpringBoot+Maven:spring-boot-maven-plugin

针对springboot和maven集成的项目,打成jar包,则需要使用springboot和maven集成好的打包插件:spring-

boot-maven-plugin,例如特别是含有@SpringBootApplication注解的入口启动程序。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.5.RELEASE</version>
            <configuration>
                <mainClass>org.apache.HelloWorld</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
# 打包
# 生成hello-maven-1.0-SNAPSHOT.jar
$ mvn package
# 执行
$ java -jar hello-maven-1.0-SNAPSHOT.jar
Hello Maven

该插件也可以通过 mvn spring-boot:run 命令进行运行。


http://www.kler.cn/a/398519.html

相关文章:

  • 算法日记 26-27day 贪心算法
  • MySql 日期周处理方式
  • 【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)
  • 在Ubuntu22.04上源码构建ROS noetic环境
  • 群控系统服务端开发模式-应用开发-前端图片格式功能开发
  • Go八股(Ⅵ)Goroutine 以及其中的锁和思想
  • 对接钉钉审批详情
  • FMEA 在新兴技术领域(如量子计算、人工智能芯片等)的应用挑战与机遇
  • linux内核中如何向slab内存分配器申请内存
  • 操作系统启动实验
  • 引领企业未来数字基础架构浪潮,中国铁塔探索超大规模分布式算力
  • 机器学习(贝叶斯算法,决策树)
  • Git与GitLab的企业实战 笔记(尚硅谷)
  • 计算机编程中的异步编程模型及其在提升应用响应性中的作用
  • 算法——两两交换链表中的节点(leetcode24)
  • 背包问题总结
  • SQL初步注入
  • 微服务day08
  • H3C NX30Pro刷机教程-2024-11-16
  • 《生成式 AI》课程 第3講 CODE TASK 任务2:角色扮演的机器人
  • 【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable
  • C++创建型模式之原型模式
  • npm、yarn、pnpm 切换查看镜像源笔记
  • OceansGallerie趣味游戏:带领Web2用户无缝融入Web3世界
  • spring基础题笔记(1)
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(下)----空间数据的编辑与处理(超超超详细!!!)