Maven工程打jar包的N种方式

Maven工程打jar包的N种方式Idea;Maven工程;jar包;N种方式

大家好,又见面了,我是你们的朋友全栈君。

一、IDEA自带打包插件

内容:此种方式可以自己选择制作胖包或者瘦包,但推荐此种方式制作瘦包。
输出:输出目录在out目录下
流程步骤

  1. 第一步: 依次选择 file->projecct structure->artifacts->点击+ (选择jar)->选择 from module with dependencies
    在这里插入图片描述
  2. 第二步:弹出窗口中指定Main Class,是否选择依赖jar包,是否包含测试。(尽量不选依赖包,防止依赖包选择不全)
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  3. 第三步:点击Build–>Build Artifacts–>选择bulid

二、maven插件打包

输出:输出目录在target目录下

2.1 制作瘦包(直接打包,不打包依赖包)

内容:仅打包出项目中的代码到JAR包中。
方式:在pom.xml中添加如下plugin; 随后执行maven install

 <!-- java编译插件 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>指定版本</version>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>

2.2 制作瘦包和依赖包(相互分离)

内容:将依赖JAR包输出到lib目录方式(打包方式对于JAVA项目是通用的)
将项目中的JAR包的依赖包输出到指定的目录下,修改outputDirectory配置,如下面的${project.build.directory}/lib。
方式

  1. pom.xml的build>plugins中添加如下配置。
  2. 点击maven project(右边栏)->选择Lifecycle->点击package打包
    注意:如果想将打包好的JAR包通过命令直接运行,如java -jar xx.jar。需要制定manifest配置的classpathPrefix与上面配置的相对应。如上面把依赖JAR包输出到了lib,则这里的classpathPrefix也应指定为lib/;同时,并指定出程序的入口类,在配置mainClass节点中配好入口类的全类名。
<plugins>
<!-- java编译插件 -->
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<archive>
			<manifest>
				<addClasspath>true</addClasspath>
				<classpathPrefix>lib/</classpathPrefix>
				<mainClass>com.yourpakagename.mainClassName</mainClass>
			</manifest>
		</archive>
	</configuration>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<executions>
		<execution>
			<id>copy</id>
			<phase>install</phase>
			<goals>
				<goal>copy-dependencies</goal>
			</goals>
			<configuration>
				<outputDirectory>${ 
   project.build.directory}/lib</outputDirectory>
			</configuration>
		</execution>
	</executions>
</plugin>
</plugins>

注意:默认的classpath会在jar包内。为了方便,可以在Main方法配置后加上manifestEntries配置,指定classpath。

<plugin>  
	<groupId>org.apache.maven.plugins</groupId>  
	<artifactId>maven-jar-plugin</artifactId>  
	<configuration>  
		<classesDirectory>target/classes/</classesDirectory>  
		<archive>  
			<manifest>  
				<!-- 主函数的入口 -->  
				<mainClass>com.yourpakagename.mainClassName</mainClass>  
				<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->  
				<useUniqueVersions>false</useUniqueVersions>  
				<addClasspath>true</addClasspath>  
				<classpathPrefix>lib/</classpathPrefix>  
			</manifest>  
			<manifestEntries>  
				<Class-Path>.</Class-Path>  
			</manifestEntries>  
		</archive>  
	</configuration>  
</plugin>  

2.3 制作胖包(项目依赖包和项目打为一个包)

内容:将项目中的依赖包和项目代码都打为一个JAR包
方式

  1. pom.xml的build>plugins中添加如下配置;
  2. 点击maven project(右边栏)->选择Plugins->选择assembly->点击assembly:assembly
    注意:1. 针对传统的JAVA项目打包;
    2. 打包指令为插件的assembly命令,尽量不用package指令。
<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> 

2.4 制作胖包(transform部分自定义)

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version>2.4.3</version>
	<executions>
		<execution>
			<phase>package</phase>
			<goals>
				<goal>shade</goal>
			</goals>
			<configuration>
				<filters>
					<filter>
						<artifact>*:*</artifact>
						<excludes>
							<exclude>META-INF/*.SF</exclude>
							<exclude>META-INF/*.DSA</exclude>
							<exclude>META-INF/*.RSA</exclude>
						</excludes>
					</filter>
				</filters>
				<transformers>
					<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>
					<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
						<resource>META-INF/spring.tooling</resource>
					</transformer>
					<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
						<mainClass>com.xxx.xxxInvoke</mainClass>
					</transformer>
				</transformers>
				<minimizeJar>true</minimizeJar>
				<shadedArtifactAttached>true</shadedArtifactAttached>
			</configuration>
		</execution>
	</executions>
</plugin>

三、SpringBoot项目打包

内容:将当前项目里所有依赖包和当前项目的源码都打成一个JAR包,同时还会将没有依赖包的JAR包也打出来,以.original保存
方式

  1. 在pom.xml的build>plugins中加入如下配置
  2. 点击maven project(右边栏)->选择Lifecycle->点击package或install打包
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

四、Scala项目打包

方式

  1. 在pom.xml的build>plugins中加入如下配置
  2. 点击maven project(右边栏)->选择Lifecycle->点击package或install打包
<plugin>
	<groupId>org.scala-tools</groupId>
	<artifactId>maven-scala-plugin</artifactId>
	<executions>
		<execution>
			<goals>
				<goal>compile</goal>
					<goal>testCompile</goal>
				</goals>
		</execution>
	</executions>
	<configuration>
		<scalaVersion>${ 
   scala.version}</scalaVersion>
		<args>
			<arg>-target:jvm-1.5</arg>
		</args>
	</configuration>
</plugin>

五、groovy项目打包

方式

  1. 在pom.xml的build>plugins中加入如下配置
  2. 点击maven project(右边栏)->选择Lifecycle->点击package或install打包
<plugin>
	<groupId>org.codehaus.gmavenplus</groupId>
	<artifactId>gmavenplus-plugin</artifactId>
	<version>1.2</version>
	<executions>
		<execution>
			<goals>
				<goal>addSources</goal>
				<goal>addStubSources</goal>
				<goal>compile</goal>
				<goal>execute</goal>
			</goals>
		</execution>
	</executions>
</plugin>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150933.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BeanCopier工具类_BeanUtils

    BeanCopier工具类_BeanUtilscglib的BeanCopier功能很强大,不过频繁的create太占用资源,降低服务器性能,所以写了下面的代码进行优化。以达到提升性能的目的。主要就是用缓存将类型相同的copier缓存起来,后续copy的时候就不用再继续创建了。这样的话如果有频繁用到BeanCopier的地方,将是很有用处滴。importorg.springframework.cglib.beans.BeanCopi…

    2025年9月15日
    5
  • HALCON相机标定相机内参相机外参

    HALCON相机标定相机内参相机外参HALCON相机标定相机内参相机外参halcon相机标定图文解释,使用halcon标定过程。这几天一直在搞相机的标定。过程中遇到了许许多多的问题,为了让广大自动化行业的小白避免踩坑,用这个帖子总结一下相机的标定。接下来我就给大家介绍一下标定,侧重点在怎么做。1.相机标定是什么首先镜头有畸变,也就是说照出的图像与实际不符产生了形变。即使号称无畸变的工业镜头也是有千分之几的畸变率的。上个图告诉大家畸变这个图里,第一个图就是我们相机下的真实的形状,后边两个就是照出来有畸变的图…

    2022年5月28日
    48
  • Idea激活码永久有效Idea2021.1.3激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2021.1.3激活码教程-持续更新,一步到位Idea激活码永久有效2021.1.3激活码教程-Windows版永久激活-持续更新,Idea激活码2021.1.3成功激活

    2022年6月17日
    281
  • 文本分类算法研究与实现

    文本分类算法研究与实现总结了文本分类中的常用算法,包括8种传统算法:k临近、决策树、多层感知器、朴素贝叶斯(包括伯努利贝叶斯、高斯贝叶斯和多项式贝叶斯)、逻辑回归和支持向量机概念及其实现代码

    2022年5月22日
    30
  • 项目总结(1.TOF相机及标定相关)

    项目总结(1.TOF相机及标定相关)1.TOF相机简介:TOF是Timeofflight的简写,直译为飞行时间的意思。所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后利用传感器接收从物体返回的光,通过探测光脉冲的飞行时间来得到目标物的距离。TOF的深度精度不随距离改变而变化,基本能稳定在cm级。2.TOF相机缺点:测量距离较常规测量仪器短,一般不超过10米测量结果…

    2022年5月9日
    34
  • Traceroute原理学习

    Traceroute原理学习Traceroute可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。曾经介绍过IP记录路由的选项RR,为什么不使用这个选项而另外开发一个新的应用程序Traceroute呢?原因有三:其一,并不是所有的路由器都支持记录路由这个选项;其二,记录路由一般是单向的选项,发送端设置了该选项,接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端。大多数的ping服

    2022年7月21日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号