首页 > 其他分享 >Maven四种打包方式

Maven四种打包方式

时间:2023-07-25 09:33:35浏览次数:36  
标签:maven 插件 plugin jar Maven 打包 org com 四种

问题

Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,

会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。

解决方法

要想jar包能直接通过java -jar xxx.jar运行,需要满足:

1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;

2、要能加载到依赖包。

方法一

使用maven-jar-plugin和maven-dependency-plugin插件打包

打包效果

生成一个jar文件和lib目录

image-20230315164251688

相关插件

maven-jar-plugin

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin/

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

<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class

<addClasspath>true</addClasspath>会在MANIFEST.MF加上Class-Path项并配置依赖包,<classpathPrefix>lib/</classpathPrefix>指定依赖包所在目录。

maven-dependency-plugin

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin

maven-dependency-plugin插件用于将依赖包拷贝到指定路径下

<outputDirectory>${project.build.directory}/lib</outputDirectory>

示例POM

<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>com.xxg.Main</mainClass>
				</manifest>
			</archive>
		</configuration>
	</plugin>
	
	<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>
</plugins>

方法二

使用maven-assembly-plugin插件打包

打包效果

相关插件

maven-assembly-plugin

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-plugin

示例POM

<plugins>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-assembly-plugin</artifactId>
		<version>2.5.5</version>
		<configuration>
			<archive>
				<manifest>
					<mainClass>com.xxg.Main</mainClass>
				</manifest>
			</archive>
			<descriptorRefs>
				<descriptorRef>jar-with-dependencies</descriptorRef>
			</descriptorRefs>
		</configuration>
	</plugin>
</plugins>

方法三

使用maven-shade-plugin插件打包

打包效果

生成一个jar包,jar包里面是将class类拷贝

image-20230315164934654

相关插件

maven-shade-plugin

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-shade-plugin

示例POM

<plugins>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-shade-plugin</artifactId>
		<version>2.4.1</version>
		<executions>
			<execution>
				<phase>package</phase>
				<goals>
					<goal>shade</goal>
				</goals>
				<configuration>
					<transformers>
						<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
							<mainClass>com.xxg.Main</mainClass>
						</transformer>
					</transformers>
				</configuration>
			</execution>
		</executions>
	</plugin>
</plugins>

遇到过的问题

如果项目中用到了Spring Framework,将依赖打到一个jar包中,运行时会出现读取XML schema文件出错。原因是Spring Framework的多个jar包中包含相同的文件spring.handlers和spring.schemas,如果生成一个jar包会互相覆盖。为了避免互相影响,可以使用AppendingTransformer来对文件内容追加合并:

<plugins>

	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-shade-plugin</artifactId>
		<version>2.4.1</version>
		<executions>
			<execution>
				<phase>package</phase>
				<goals>
					<goal>shade</goal>
				</goals>
				<configuration>
					<transformers>
						<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
							<mainClass>com.xxg.Main</mainClass>
						</transformer>
						<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
							<resource>META-INF/spring.handlers</resource>
						</transformer>
						<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
							<resource>META-INF/spring.schemas</resource>
						</transformer>
					</transformers>
				</configuration>
			</execution>
		</executions>
	</plugin>

</plugins>

方法四

使用spring-boot-maven-plugin插件打包,多用于spring项目

打包效果

生成一个jar包

image-20230315162933134

相关插件

spring-boot-maven-plugin

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-maven-plugin

示例POM

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.7.9</version>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <mainClass>com.example.service.DubboProvider</mainClass>
        </configuration>
    </plugin>
</plugins>

参考

https://blog.csdn.net/xiao__gui/article/details/47341385#

maven多模块项目springboot打包:

https://blog.csdn.net/Blackjoker0/article/details/126954209

标签:maven,插件,plugin,jar,Maven,打包,org,com,四种
From: https://www.cnblogs.com/pacemrc/p/17578170.html

相关文章

  • inno setup打包软件学习
    目录一 打包结果二示例打包脚本三错误解决3.1另一个程序正在使用此文件,进程无法访问3.2桌面图标无法修改四参考资料一 打包结果二示例打包脚本使用打包软件下载地址:innosetup-6.2.2.exeUS7,1552023-02-15UnicodeInnoSetup self-installingpackage.#defineMyAppName......
  • 从密码重置打到Getshell和其它漏洞打包
    前言前几天是准备上点edusrc的分的所以就准备用手上还没刷的Nday继续上分,然后就有了今天这个案例:信息收集之前在挖某体育学院证书的时候就挖到过一个通过修改html文件更改密码修改步骤的漏洞所以就准备测绘一下这个资产继续看看能不能上分挑一个打开:没有背景图了但还是......
  • 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)
    前言   但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子。假如一个项目,由A、B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端。A和B都习惯使用SVN作为代码管理工具,他们分别开始工作,一个功能完成后会提交到SVN,以便对......
  • 【Spring Boot 初识丨maven】
    上一篇讲了使用spirngboot自带的构建器构建项目本篇来讲一讲如何从零开始构建一个maven项目前提:jdk推荐java17及以上maven推荐Maven3.5+(maven构建)一、安装maven  Maven的安装需要依赖JDK的安装,所以必须先安装完成JDK且配置好JDK环境变量后在进行Maven的安装。......
  • rodert教你学Maven-实战这一篇就够了
    欢迎大家前来白嫖PDF。下图回复:666本教程致力于最实用教程,个别图片粘贴有丢失,还有来领取原版。文章目录前言1.什么是Maven?2.maven的作用2.1.Maven的功能2.2.为什么使用maven3.maven安装和配置3.1.安装3.2.配置4.maven项目规约5.命令行构建maven项目5.1.命令行构建Java项目5.2.使用......
  • AsssetBundle打包(一)
    先建立一个需要打包的配置文件(方便打包路径的修改)usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;[CreateAssetMenu(fileName="ABConfig",menuName="CreatABConfig",order=0)]publicclassABConfig:ScriptableObject{/......
  • UE4构建基础和实践:二、Editor打包Win&Android
    此次打包使用的是5.2版本Win包操作流程参考打包项目|UE文档设置默认地图点击创建打包文件解释&分析产物分析打开打包时设置输出目录,大概如下:可以看到大概有下面几个文件目录:-ProjectName:我的项目名是BuildTest,所以文件名为BuildTest-Engine:引擎相关目录-Bui......
  • UE4构建基础&实践:三、UAT命令打包
    序言在上一篇文章中,我们使用了Editor进行打包,提到了日志的中的打包命令和参数。这一篇中,我们将实践使用UAT和默认命令打包Android,并介绍相关参数和用法。UAT&打包命令首先给出UAT工具的运行方法和打包命令参数:UAT在引擎目录下找到Engine\Build\BatchFiles的RunUAT.bat文件......
  • UE4构建基础和实践:五、CI/CD平台自动化打包
    序言使用CI/CD平台构建(这里使用蓝盾平台)主要是通过平台脚本运行上一章的py脚本并传递参数(即把py中的参数开放给配置平台脚本配置)。Build.py重构我们需要在py脚本里面解析和设置参数importsysimportosimportgetoptdefmain(argv):ProjectName=""......
  • UE4构建基础和实践:四、使用脚本打包
    序言使用UE版本为UE5.20在实际项目中,我们常常使用自动化脚本来进行构建,它可以增加我们的生产效率,并降低人为操作带来的失误风险。BuildGraphBuildGraphUE官方提供的构建脚本系统,它可以读取对应的XML脚本实现自动化打包。BuildGraph相关的参考BuildGraph|UE文档重点是它相......