java 解决maven引入本地jar并生成可单独运行jar包

问题描述

第三方JarMaven管理。在生成可单独运行Jar(不依赖其他外部Jar)时,可选择以下两种解决方案。

解决方案

方案一

1.本地jar安装至Maven仓库
方式一:
通过命令mvn install:install-file安装

mvn install:install-file -Dfile=(jar包的位置) -DgroupId=groupId(分组) -DartifactId=artifactId(jar名称) -Dversion=version(版本号) -Dpackaging=jar

方式二
通过maven-install-plugin插件安装

 
 <plugin>
     <groupId>org.apache.maven.pluginsgroupId>
     <artifactId>maven-install-pluginartifactId>
     <version>2.5.2version>
     <executions>
         <execution>
             <id>install-artifactId(jar名称)id>
             <phase>cleanphase>
             <configuration>
                 <file>${basedir}/lib/**.jar(jar包的位置)file>
                 <repositoryLayout>defaultrepositoryLayout>
                 <groupId>groupId(分组)groupId>
                 <artifactId>artifactId(jar名称)artifactId>
                 <version>version(版本号)version>
                 <packaging>jarpackaging>
                 <generatePom>truegeneratePom>
             configuration>
             <goals>
                 <goal>install-filegoal>
             goals>
         execution>
     executions>
 plugin>

执行mvn clean进行安装

2.在dependencies中引入刚安装的jar

<dependency>
	<groupId>分组groupId>
	<artifactId>jar名称artifactId>
	<version>版本号version>
dependency>

3.引入maven-assembly-plugin插件

<plugin>
	<artifactId>maven-assembly-pluginartifactId>
	<configuration>
		<descriptorRefs>
			<descriptorRef>jar-with-dependenciesdescriptorRef>
		descriptorRefs>
		<archive>
			<manifest>
				<mainClass>mainClass>
			manifest>
		archive>
	configuration>
	<executions>
		<execution>
			<id>make-assemblyid>
			<phase>packagephase>
			<goals>
				<goal>singlegoal>
			goals>
		execution>
	executions>
plugin>

4.执行mvn package assembly:single打包。

5.通过java -jarjava -cp 执行。

方案二

1.通过system引入jar

示例:

<dependencies>
	<dependency>
		<groupId>localgroupId>
		<artifactId>commons-collectionsartifactId>
		<version>3.2.2version>
		<type>jartype>
		<scope>systemscope>
		<systemPath>${project.basedir}/lib/commons-collections-3.2.2.jarsystemPath>
	dependency>
dependencies>

如下图:
java 解决maven引入本地jar并生成可单独运行jar包_第1张图片
2.引入maven-compiler-pluginmaven-assembly-plugin插件

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.pluginsgroupId>
			<artifactId>maven-compiler-pluginartifactId>
			<version>3.7.0version>
			<configuration>
				<source>1.8source>
				<target>1.8target>
				<encoding>UTF-8encoding>
			configuration>
		plugin>
		
		<plugin>
			<groupId>org.apache.maven.pluginsgroupId>
			<artifactId>maven-assembly-pluginartifactId>
			<version>3.2.0version>
			<configuration>
				<archive>
					<manifest>
						<addClasspath>trueaddClasspath>
						<classpathPrefix>lib/classpathPrefix>
						
						<mainClass>com.gm.DemomainClass>
					manifest>
				archive>
				<descriptors>
					<descriptor>src/main/resources/assembly.xmldescriptor>
				descriptors>
			configuration>
			<executions>
				<execution>
					<id>make-assemblyid>
					<phase>packagephase>
					<goals>
						<goal>singlegoal>
					goals>
				execution>
			executions>
		plugin>
	plugins>
build>

3.创建assembly.xml

<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id>releaseid>
	<formats>
		<format>jarformat>
	formats>
	<includeBaseDirectory>falseincludeBaseDirectory>
	<dependencySets>
		<dependencySet>
			<outputDirectory>/outputDirectory>
			<useProjectArtifact>trueuseProjectArtifact>
			<unpack>trueunpack>
			<scope>runtimescope>
		dependencySet>
		<dependencySet>
			<outputDirectory>/outputDirectory>
			<useProjectArtifact>falseuseProjectArtifact>
			<unpack>trueunpack>
			<scope>systemscope>
		dependencySet>
	dependencySets>
assembly>

4.执行命令生成可运行的jar

mvn package assembly:single

java 解决maven引入本地jar并生成可单独运行jar包_第2张图片

5.通过java -jarjava -cp 执行
java 解决maven引入本地jar并生成可单独运行jar包_第3张图片

示例项目

请访问Git:https://github.com/gm19900510/local-jar-assembly-package-demo 欢迎Star

你可能感兴趣的:(java,web,maven,systemPath)