如何使用maven打包jar,并可直接执行
文中介绍了如何将所有依赖的jar打包到同一个jar包里的方法,同时提供了shell脚本,仅供参考。
一、新创建一个maven项目,pom.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.xxx</groupId>
<artifactId>xx</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.68</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</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>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!--指定java -jar 运行时的main类-->
<mainClass>com.xx.xx</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
二、打包执行的脚本如下
#!/bin/bash
#variable=(arg1 arg2 arg3 ....) 需要修改
targetPathArray=(需要拷贝到路径1 要拷贝到路径2)
export JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export MAVEN_HOME=/xx/apache-maven-3.2.5-jdk1.6
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
mvn clean
mvn package -Dmaven.test.skip=true
mvnjartargetpath=/xx/target
#排除META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF,防止执行时产生签名错误
zip -d $mvnjartargetpath/xx-1.0.jar 'META-INF/.SF' 'META-INF/.RSA' 'META-INF/*SF'
#拷贝xx-1.0.jar到指定目录targetPathArray,此步骤可忽略
for targetPath in "${targetPathArray[@]}" ;do
echo "begin cp to $targetPath"
cp $mvnjartargetpath/xx-1.0.jar $targetPath
echo "cp finish to $targetPath"
done
三、如何执行main?
java -jar xx-1.0.jar