如何使用maven打包jar,并可直接执行

337 阅读1分钟

如何使用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

WX20250122-103957.png