maven 打包可执行jar的方法

在这之前,我自己找了点maven的东西添加进来

Maven内置变量说明:
	${basedir} 项目根目录
	${project.build.directory} 构建目录,缺省为target
	${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
	${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
	${project.packaging} 打包类型,缺省为jar
	${project.xxx} 当前pom文件的任意节点的内容



方式1

修改pom.xml增加如下内容

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<version>2.4</version>
	<configuration>
		<archive>
			<manifest>
				<addClasspath>true</addClasspath>
				<classpathPrefix>lib/</classpathPrefix>
				<mainClass>com.sysware.HelloWorld</mainClass>
			</manifest>
		</archive>
	</configuration>
</plugin>

运行mvn clean package即可

批注:

经过我本人自测之后发现,这种方式虽然可以打包,但是不会将依赖包也添加进去。所以我认为这种方式的打包适合写一个工具,然后打成JAR包,导入其他工程使用,如果是一个单独运行的JAR包,则不适用。

方式2

在pom.xml增加如下内容

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<version>2.3</version>
	<configuration>
		<appendAssemblyId>false</appendAssemblyId>
		<descriptorRefs>
			<descriptorRef>jar-with-dependencies</descriptorRef>
		</descriptorRefs>
		<archive>
			<manifest>
				<mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
			</manifest>
		</archive>
	</configuration>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>assembly</goal>
			</goals>
		</execution>
	</executions>
</plugin>
运行mvn assembly:assembly ( 我自己使用mvn clean package也是可以的

批注:

这个方式和方式1不同,这种打包方式,将项目及所依赖的所有jar包打包成一个jar,让打出来的JAR包成为一个可独立运行的JAR包

方式3

批注:

    我自己在博主的基础上,添加了一些配置和注释

    方式3和方式4都是比较复杂的打包方式,但是可以自己定义细节,比如需要哪些文件被打包,哪些文件不打包进去,哪些文件放到哪里等等。

<build>
	<finalName>test-${project.version}</finalName>
	<sourceDirectory>src/main/java</sourceDirectory>
	<resources>
		<!-- 控制资源文件的拷贝 -->
		<resource>
			<directory>src/main/resources</directory>
			<targetPath>${project.build.directory}</targetPath>
			<!-- excludes和includes二选一使用即可 -->
			<!-- 不包含的文件,支持通配符 -->
			<excludes>
				<exclude>*.txt</exclude>
			</excludes>
			<!-- 包含的文件,支持通配符 -->
			<includes>
				<include>*.properties</include>
			</includes>
		</resource>
	</resources>
	<plugins>
		<!-- 设置源文件编码方式 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<defaultLibBundleDir>lib</defaultLibBundleDir>
				<source>1.7</source>
				<target>1.7</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
		<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<configuration>
				<archive>
					<manifest>
						<addClasspath>true</addClasspath>
						<classpathPrefix>lib/</classpathPrefix>
						<mainClass>com.eya.main.Hello</mainClass>
					</manifest>
				</archive>
			</configuration>
		</plugin>
		<!-- 拷贝依赖的jar包到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>
						<outputDirectory>
							${project.build.directory}/lib
						</outputDirectory>
					</configuration>
				</execution>
			</executions>
		</plugin>
		<!-- 解决资源文件的编码问题 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<version>2.4</version>
			<configuration>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
		<!-- 打包source文件为jar文件(源码,可选) -->
		<plugin>
			<artifactId>maven-source-plugin</artifactId>
			<version>2.1</version>
			<configuration>
				<attach>true</attach>
				<encoding>UTF-8</encoding>
			</configuration>
			<executions>
				<execution>
					<phase>compile</phase>
					<goals>
						<goal>jar</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

方式4

<build>
		<resources>
			<resource>
				<targetPath>${project.build.directory}/classes</targetPath>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.0</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.0</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>com.test.testguava.app.App</mainClass>
								</transformer>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
									<resource>applicationContext.xml</resource>
								</transformer>
							</transformers>
							<shadedArtifactAttached>true</shadedArtifactAttached>
							<shadedClassifierName>executable</shadedClassifierName>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

转载于:https://my.oschina.net/simpleton/blog/607776

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值