1 目标
将本地 lib 和依赖 jar 包一起打为一个可执行的 jar 包。
2 程序结构
主项目:com.alfred.maven.packagejar-exec
引入本地 jar 包:maven-demo01-1.0.0-SNAPSHOT.jar
引入 maven 依赖包:log4j-1.2.12.jar
- 主项目结构
com.alfred.maven.packagejar-exec
∟ lib
∟ maven-demo01-1.0.0-SNAPSHOT.jar
∟ src
∟ main
∟ java
∟ com.alfred.maven.packagejarexec
∟ Main
∟ resources
∟ log4j.properties
∟ pom.xml
- 主项目 Main 代码
package com.alfred.maven.packagejarexec;
import com.alfred.maven.demo01.MavenDemo01;
import org.apache.log4j.Logger;
/**
* @Author: alfred
* @Date: 2020/11/24
* @description:
*/
public class Main {
private static Logger logger = Logger.getLogger(Main.class);
public static void main(String[] args) {
if(args == null || args.length == 0){
logger.info("packagejar exec args is null");
}else{
logger.info("packagejar exec args.length = "+args.length);
}
logger.info("maven demo01 say:"+MavenDemo01.sayName());
}
}
- Demo01 的 MavenDemo01 代码
package com.alfred.maven.demo01;
/**
* @Author: alfred
* @Date: 2020/11/24
* @description:
*/
public class MavenDemo01 {
public static String sayName(){
return "demo01";
}
}
3 Maven 的 POM 脚本
<?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>com.alfred.maven</groupId>
<artifactId>maven-packagejar-exec</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<description>
概述:【Maven技术研究】打可执行 jar 包
目标:将本地 lib 和依赖 jar 包一起打为一个可执行的 jar 包
实现效果:输入 jar 包参数,打印日志输出参数个数,并调用本地jar包打印返回信息
1)主函数:com.alfred.maven.packagejarexec.Main
2)本地依赖包路径:lib(存放demo01)
3)maven 依赖包:log4j
</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<log4j.version>1.2.12</log4j.version>
</properties>
<dependencies>
<!-- maven依赖包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 本地jar包 -->
<dependency>
<groupId>com.alfred.maven</groupId>
<artifactId>maven-demo01</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/maven-demo01-1.0.0-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 自动清理 -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>auto-clean</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<!--
使用场景:在使用maven依赖或本地jar包都可以使用该方式打包可执行jar包
特点:会把依赖的所有jar包完整的压缩到可执行jar包中
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.alfred.maven.packagejarexec.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<configuration>
<!-- 自定义jar包名称 -->
<filename>packagejar-exec.jar</filename>
<attachToBuild>true</attachToBuild>
<classifier>onejar</classifier>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--
使用场景:在没有使用本地jar包情况下,也可以使用该方式打包
特点:会解压依赖包合并到可执行jar包中
-->
<!-- <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>-->
<!-- <!– 自定义jar包名称 –>-->
<!-- <finalName>packagejar-exec</finalName>-->
<!-- <transformers>-->
<!-- <transformer-->
<!-- implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">-->
<!-- <mainClass>com.alfred.maven.packagejarexec.Main</mainClass>-->
<!-- </transformer>-->
<!-- </transformers>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
</plugins>
</build>
</project>
4 打包结构
packagejar-exec.jar
∟ META-INF
∟ com.simontuffs.onejar
∟ ...(打包组件的编译程序,省略)
∟ doc
∟ lib
∟ log4j-1.2.12.jar
∟ maven-demo01-1.0.0-SNAPSHOT.jar
∟ main
∟ maven-packagejar-exec-1.0.0-SNAPSHOT.jar
∟ src
∟ ...(打包组件的编译程序,省略)