图文详解Maven工程打jar包的N种方式

目录
  • 一、IDEA自带打包插件
  • 二、maven插件打包
    • 2.1 制作瘦包(直接打包,不打包依赖包)
    • 2.2 制作瘦包和依赖包(相互分离)
    • 2.3 制作胖包(项目依赖包和项目打为一个包)
    • 2.4 制作胖包(transform部分自定义)
  • 三、SpringBoot项目打包
  • 四、Scala项目打包
  • 五、groovy项目打包
  • 总结

一、IDEA自带打包插件

内容:此种方式可以自己选择制作胖包或者瘦包,但推荐此种方式制作瘦包。

输出:输出目录在out目录下

流程步骤

第一步: 依次选择 file->projecct structure->artifacts->点击+ (选择jar)->选择 from module with dependencies

第二步:弹出窗口中指定Main Class,是否选择依赖jar包,是否包含测试。(尽量不选依赖包,防止依赖包选择不全)

第三步:点击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包

方式

pom.xml的build>plugins中添加如下配置;

点击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保存

方式

在pom.xml的build>plugins中加入如下配置点击maven project(右边栏)->选择Lifecycle->点击package或install打包

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

四、Scala项目打包

方式

在pom.xml的build>plugins中加入如下配置

点击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项目打包

方式

在pom.xml的build>plugins中加入如下配置

点击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>

总结

到此这篇关于Maven工程打jar包的N种方式的文章就介绍到这了,更多相关Maven工程打jar包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Maven导入本地jar包的实现步骤

    目录 1. 在本地maven仓库安装本地jar包 2.把本地jar包放在项目的某个目录中 3.使用scope system依赖 参考资料 软件项目管理和发布工具Maven给java的开发带来了很多的方便.需要引用其他jar包的时候只需要在pom.xml添加相关的依赖,maven就会自动解析依赖.下载jar包,更新jar包也只需要修改version字段,大大简化了jar包的引用.但是有时候我们要用的某几个包在maven上不存在,只能下载jar包到本地并添加到java项目中,然而问题随之而来:mav

  • maven引入本地jar包运行报错java.lang.NoClassDefFoundError解决

    目录 正文 maven引入本地jar的示例 配置maven将本地jar打入package中 maven打包知识分享 scope详解 正文 下文笔者讲述maven引入本地jar包时,运行报错"java.lang.NoClassDefFoundError"的处理方法分享,如下所示 今天在编写maven项目    导入本地jar包    部署到服务器上找不到包  报错信息如:java.lang.NoClassDefFoundError那么如何解决呢?   这种问题是由于,本地jar包在打包的

  • 使用Maven打包时包含资源文件和源码到jar的方法

    目录 Maven打包时包含资源文件和源码到jar 在<build>中添加以下内容 意义如下 maven打包时包含源码的问题 Maven打包时包含资源文件和源码到jar 在使用Maven打包时,我们发现最终打包之后jar中只有已经编译完成的代码class,资源文件都没了,如果有资源文件需要打包进jar的话,直接打包jar无法正常工作. 其实,在pom.xml中配置一下<build>节点即可实现把资源打包进来的操作. 在<build>中添加以下内容 <resource

  • 手动实现将本地jar添加到Maven仓库

    目录 手动将本地jar添加到Maven仓库 将jar添加到本地仓库的做法 不讲jar包添加到本地仓库也可在maven工程中使用外部jar包做法 手动向maven仓库添加jar包的cmd命令 手动将本地jar添加到Maven仓库 将jar添加到本地仓库的做法 以下面pom.xml依赖的jar包为例: 实际项目中pom.xml依赖写法: <dependency>     <groupId>org.springframework</groupId>     <artif

  • maven手动上传jar包示例及图文步骤过程

    目录 一.maven私服搭建 二.gradle配置 三.打包 四.上传至maven私服中 五.使用 六.刷新gradle 一.maven私服搭建 使用Nexus进行搭建,网上教程很多,不多赘述了. 二.gradle配置 在build.gradle文件的根节点中添加以下内容 //打包源代码 task sourcesJar(type: Jar) { classifier = 'sources' from sourceSets.main.allSource } artifacts { archives

  • jar包手动添加到本地maven仓库的步骤详解

    目录 第一步:下载需要添加的jar包 第二步:将下载的jar包放到指定位置(位置自己指定,用得到) 第三步:配置本地maven库 总结 第一步:下载需要添加的jar包 可以在maven库中查找下载,也可以在对应官网下载 maven库网址:https://mvnrepository.com/ 第二步:将下载的jar包放到指定位置(位置自己指定,用得到) 建议放在maven的repository路径下,方便管理 第三步:配置本地maven库 1.首先检查本地maven库环境变量是否配置正确 打开cm

  • 图文详解Maven工程打jar包的N种方式

    目录 一.IDEA自带打包插件 二.maven插件打包 2.1 制作瘦包(直接打包,不打包依赖包) 2.2 制作瘦包和依赖包(相互分离) 2.3 制作胖包(项目依赖包和项目打为一个包) 2.4 制作胖包(transform部分自定义) 三.SpringBoot项目打包 四.Scala项目打包 五.groovy项目打包 总结 一.IDEA自带打包插件 内容:此种方式可以自己选择制作胖包或者瘦包,但推荐此种方式制作瘦包. 输出:输出目录在out目录下 流程步骤: 第一步: 依次选择 file->pr

  • 详解如何将本地JAR包添加到本地Maven仓库中

    详解如何将本地JAR包添加到本地Maven仓库中 有些时候,当我们需要在自己的maven工程中添加一个确定的jar而发现Maven中央仓库不存在时,但是我们自己手上有这些需要的jar包,那么我们可以自给自足,把这个jar包添加到我们的自己的maven仓库中,这样方便在maven工程中引用. 比如sqljdbc.jar在Maven中央仓库中找不到,但是我们的maven工程中确实需要这样的一个jar包,那么我们首先需要下载对应版本的sqljdbc.jar包到本地,然后按照以下的命令添加到本地仓库.(

  • 详解idea+maven打jar包的两种方式

    两种打jar包的方法: jar包工程是maven下的quickstart工程 需要jar的是maven下的webapp工程(我这里是这样的 ) 一.普通jar包的打包方式: 在我们的idea工程界面,点击右上角的project structure 然后在project setting里面选择Artifacts,点击加号,选择jar,给个包名,然后apply 回到我们的工程界面,选择菜单栏中的build,下拉菜单中的build artifacts 如果是第一次打包就build,不是就rebuild

  • java打jar包的几种方式详解

    一.制作只含有字节码文件的jar包 我们先来看只含有字节码文件,即只含有class文件的jar包怎么制作,这是最简单的形式 1.最简单的jar包--直接输出hello 最终生成的jar包结构 META-INF Hello.class 方法步骤 (1)用记事本写一个Hello.java的文件 class Hello{     public static void main(String[] agrs){         System.out.println("hello");     }

  • maven工程中jar包瘦身的五种方法

    java项目中常用maven工具来进行工程管理,但经常遇到的一个问题是生成的jar包越来越大,编译一次工程越来越慢.怎么有效地去除冗余依赖,给jar包进行瘦身,是一项必备技能.下面介绍在maven工程中jar包瘦身五大法: 一.将环境中已包含的依赖包的scope设置为provided pom中依赖的部分包可能在你程序运行环境中已经包含,此时应该将依赖包的scope设置为provided.如protobuf包如在环境中已包含,则应设置为: <dependency> <groupId>

  • idea+maven打jar包的两种方式

    两种打jar包的方法: jar包工程是maven下的quickstart工程 需要jar的是maven下的webapp工程(我这里是这样的 ) 一.普通jar包的打包方式: 在我们的idea工程界面,点击右上角的project structure 然后在project setting里面选择Artifacts,点击加号,选择jar,给个包名,然后apply 回到我们的工程界面,选择菜单栏中的build,下拉菜单中的build artifacts 如果是第一次打包就build,不是就rebuild

  • Maven打jar包的三种方式(小结)

    不包含依赖jar包 该方法打包的jar,不包含依赖的jar包,也没有指定入口类. <build> <plugins> <plugin> <!-- 指定项目编译时的java版本和编码方式 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.

  • IDEA中打jar包的2种方式(Maven打jar包)

    前言 在讲这两种方式之前,我们先来说明一下什么是java中的jar文件 jar (Java Archive File),翻译过来就是java的档案文件,它其实也类似于我们windows下的zip文件,唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,包含了JAR包的描述信息.主类的全类名等信息. 一:不使用Maven直接打Jar包. 1.File -->Project Structure -->A

  • 详细总结IDEA中打jar包的两种方式

    一.前言 在讲这两种方式之前,我们先来说明一下什么是java中的jar文件 jar (Java Archive File),翻译过来就是java的档案文件,它其实也类似于我们windows下的zip文件,唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,包含了JAR包的描述信息.主类的全类名等信息. 二.不使用Maven直接打Jar包 1.File -->Project Structure -->

  • IDEA中打jar包的两种方式

    在讲这两种方式之前,我们先来说明一下什么是java中的jar文件 jar (Java Archive File),翻译过来就是java的档案文件,它其实也类似于我们windows下的zip文件,唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,包含了JAR包的描述信息.主类的全类名等信息. 一:不使用Maven直接打Jar包. 1.File -->Project Structure -->Arti

随机推荐