传统构建 jar 包的方法是通过人工手动执行 Maven 命令来完成。
但如果我们想要制作自动化构建和部署项目的工具,就需要让程序帮我们自动构建 jar 包。
这里以 Java 语言为例,分享一下教程。
程序的本质就是代替人工进行操作,所以如果要实现程序自动构建 jar 包,只需要让程序来替我们执行 Maven 打包命令即可。
1)首先需要在本地(或服务器)安装 Maven 并配置环境变量,参考教程:https://blog.csdn.net/qq_45344586/article/details/130935169
安装完成后,打开终端,执行 mvn -v
命令检测是否安装成功,鱼皮本地的环境是 Maven 3.9.5:
2)新建 JarGenerator.java
类,编写 jar 包构建逻辑。
程序实现的关键是:使用 Java 内置的 Process 类执行 Maven 打包命令,并获取到命令的输出信息。需要注意,不同的操作系统,执行的命令代码不同。
完整代码如下:
package com.yupi.maker.generator;
import java.io.*;
public class JarGenerator {
public static void doGenerate(String projectDir) throws IOException, InterruptedException {
// 清理之前的构建并打包
// 注意不同操作系统,执行的命令不同
String winMavenCommand = "mvn.cmd clean package -DskipTests=true";
String otherMavenCommand = "mvn clean package -DskipTests=true";
String mavenCommand = winMavenCommand;
// 这里一定要拆分!
ProcessBuilder processBuilder = new ProcessBuilder(mavenCommand.split(" "));
processBuilder.directory(new File(projectDir));
Process process = processBuilder.start();
// 读取命令的输出
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 等待命令执行完成
int exitCode = process.waitFor();
System.out.println("命令执行结束,退出码:" + exitCode);
}
public static void main(String[] args) throws IOException, InterruptedException {
doGenerate("C:\\code\\yuzi-generator\\yuzi-generator-maker\\generated\\acm-template-pro-generator");
}
}
需要注意,要把上述代码 main 方法中的生成路径改为自己本地的项目路径。
3)想使用 Maven 打包项目,项目的根目录下必须要有 pom.xml
项目管理文件。而且在 pom.xml
中,需要使用 maven-assembly-plugin
插件,实现将依赖一起打到 jar 包中。
完整代码如下,注意要将 mainClass
标签的内容改为自己项目中可运行的主类路径:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${basePackage}.Main</mainClass> <!-- 替换为你的主类的完整类名 -->
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4)之后通过一行代码就可以构建 jar 包了:
public class MainGenerator {
public static void main(String[] args) throws IOException, InterruptedException {
String outputPath = "项目代码根路径";
// 构建 jar 包
JarGenerator.doGenerate(outputPath);
}
}
测试 jar 包构建,首次构建需要拉取依赖信息,要等一段时间。
最后看到下图的输出信息,表示打包成功:
在生成的目录中看到了 pom.xml 和 jar 包文件:
编程导航的定制化代码生成项目中,使用了上述方式实现 jar 包的自动构建。
👉🏻 编程导航原创项目教程系列:https://yuyuanweb.feishu.cn/wiki/SePYwTc9tipQiCktw7Uc7kujnCd