把Maven项目连同其依赖jar包一同打成jar包,并运行入口类

需求:

在我本地的电脑上存在一个maven工程,在pom文件中依赖了一些第三方jar包。现在需要把工程打成jar包,然后放到linux服务器中运行。

因此i,现在就需要在打jar包的同时既要指定运行该jar包的入口类,又要连同第三方jar包一块打成jar包。

目录:

1.jar包和war包的区别;

2.package命令打jar包的两种方式:

2.1.jar-plugin和dependency-plugin配置

2.2.jar-plugin、assembly-plugin以及assembly所需的配置文件

一、jar包和war包的区别

1.1、jar包

当电脑没有tomcat等web容器,只配置了java环境,支持java的doc命令时(就是cmd黑窗口中的命令),可以使用命令:
java -jar jar包名称 
来运行jar包。当然,此时运行的jar包中必须有一个main方法,并且生成jar包的时候,把这个main方法所在的类作为了入口类

1.2、war包

当电脑上有tomcat等web容器时,可以把工程打成war包,然后将war包放入tomcat服务器中,tomcat将会自动解析war包,并执行。

1.3区别

如果仔细看上面的介绍的话,你会发现:

执行jar包——执行的就是普通的java工程(是通过main方法来执行的);

执行war包——执行的是web工程,不需要指定入口类。


二、通过package命令打jar包

maven是支持将当前工程打成jar包的,只不过需要在pom文件中加入一些配置,确切的来说,应该是一些maven自带并支持的一些插件(个人这么理解)。

2.1.jar-plugin和dependency-plugin配置

通过jar-plugin和dependency-plugin,使用package命令或者是mvn:install命令,会把当前工程打成jar包,同时相关的第三方依赖会被放入一个lib包中。<注意,需要把工程的打包方式改成jar>

需要有两处配置:


2.1.1、将工程打成jar包(如下代码可以直接复制使用,但是注意入口类的指向需要更改)

<!–将工程打成jar包(不包含第三方依赖包)–> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <configuration> <archive> <manifest> <!– 不记录版本号 –> <addclasspath>true</addclasspath> <classpathprefix>lib/</classpathprefix> <!–指定入口类,在GetMe类中有main方法–> <mainclass> org.ls.msap.raiscom.test.GetMe </mainclass> </manifest> <!–可省,但是建议加上–> <manifestentries> <class-paht>.</class-paht> </manifestentries> </archive> </configuration> </plugin>


2.1.2、将工程需要的第三方依赖包抽出来,放在lib文件夹下(如下代码可以直接复制使用)

<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-dependency-plugin</artifactid> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!–文件生成路径 project.build.directory可以直接使用–> <outputdirectory> ${project.build.directory}/lib </outputdirectory> </configuration> </execution> </executions> </plugin>


完整下过如下:

<build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</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>org.ls.msap.raiscom.test.GetMe</mainclass> </manifest> <!–指定入口类–> <manifestentries> <class-paht>.</class-paht> </manifestentries> </archive> </configuration> </plugin> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-dependency-plugin</artifactid> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!–文件生成路径 project.build.directory可以直接使用–> <outputdirectory> ${project.build.directory}/lib </outputdirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>

2.1.3、pom文件配置完成后,执行Run as —— maven build.. ,点开后,输入package命令


《把Maven项目连同其依赖jar包一同打成jar包,并运行入口类》



2.1.4、执行成功后,会在target目录下生成一个jar包和一个lib文件夹

《把Maven项目连同其依赖jar包一同打成jar包,并运行入口类》


2.1.5、将lib文件夹和jar包一起放在linux服务器上,注意二者需要在同一目录下

2.1.6、执行jar包

在linux系统中切换路径到lib文件夹和jar包所在文件夹,然后执行:java -jar ls-msao-raiscom-0.0.1-SNAPSHOT.jar  敲起enter 执行完成

2.1.7、注意

生成的jar包名称是你maven工程的artifactId+version,所以不用纠结名称

2.2.jar-plugin、assembly-plugin以及assembly所需的配置文件(推荐)

通过jar-plugin、assembly-plugin可以将项目jar包打成压缩包的方式,比如zip,tar等方式,但是需要多添加一个assembly的配置文件,在这个文件中指定将jar包打成什么样类型的压缩包。

压缩包解压后,会生成项目打成的jar包,lib依赖文件,以及assembly的配置文件。

话不多说,上代码:

2.2.1、jar-plugin:将工程打成jar包,需要指定jar包的入口类

<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-jar-plugin</artifactid> <!– The configuration of the plugin –> <configuration> <!– Configuration of the archiver –> <archive> <!– do not include pom.xml and pom.properties in the jar package –> <addmavendescriptor>false</addmavendescriptor> <!– Manifest specific configuration –> <manifest> <!– put third party jar package into the classpath of manifest –> <addclasspath>true</addclasspath> <!– the prefix of the jar items in the classpath, it depends on the location(folder) of jar files –> <classpathprefix>lib/</classpathprefix> <!– main class of the jar package –> <mainclass>org.ls.msap.raiscom.test.GetMe</mainclass> </manifest> </archive> <!– excludes some files –> <excludes> <exclude>${project.basedir}/xml/*</exclude> </excludes> </configuration> </plugin>


2.2.2、assembly-plugin:打包依赖jar包

<plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-assembly-plugin</artifactid> <!– The configuration of the plugin –> <configuration> <!– Specifies the configuration file of the assembly plugin –> <descriptors> <descriptor>conf/package.xml</descriptor><!–assembly的配置文件目录–> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>


2.2.3、assembly的配置文件

<directory>${project.basedir}\resources</directory><?xml version=”1.0″ encoding=”UTF-8″?> <assembly> <id>bin</id> <!– 打包方式 –> <!– 最终打包成一个用于发布的zip文件 –> <formats> <format>zip</format> </formats> <!– Adds dependencies to zip package under lib directory –> <dependencysets> <dependencyset> <!– 不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录 –> <useprojectartifact>false</useprojectartifact> <outputdirectory>lib</outputdirectory> <unpack>false</unpack> </dependencyset> </dependencysets> <filesets> <!– 把项目相关的说明文件,打包进zip文件的根目录 –> <fileset> <directory>${project.basedir}</directory> <outputdirectory>/</outputdirectory> <includes> <include>README*</include> <include>LICENSE*</include> <include>NOTICE*</include> </includes> </fileset> <!– 把项目的配置文件,打包进zip文件的config目录 –> <fileset> <directory>${project.basedir}\conf</directory> <outputdirectory>conf</outputdirectory> <includes> <include>*.xml</include> <include>*.properties</include> <include>*.key</include> </includes> </fileset> <!– 把项目的脚本文件目录( src/main/scripts )中的启动脚本文件,打包进zip文件的跟目录 –> <fileset> <directory>${project.build.scriptSourceDirectory}</directory> <outputdirectory></outputdirectory> <includes> <include>startup.*</include> </includes> </fileset> <!– 把项目自己编译出来的jar文件,打包进zip文件的根目录 –> <fileset> <directory>${project.build.directory}</directory> <outputdirectory></outputdirectory> <includes> <include>*.jar</include> </includes> </fileset> </filesets> </assembly>

2.2.4、如下是assembly的目录:

《把Maven项目连同其依赖jar包一同打成jar包,并运行入口类》

2.2.5、带配置完成后,执行打包命令即可。



    原文作者:叫我吕小布
    原文地址: https://blog.csdn.net/qq_36769100/article/details/78501733
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞