当前有一个系统用于导出项目,而每次导出的项目并不可以直接使用,需要手动从gitee代码仓库中获取一个模板代码然后将他们整合到一起它才是一个完整的项目,所以目前我的任务就是编写一个java程序可以自动地从gitee仓库拉取下来那个模板代码到指定地路径上去。并且我还要将这个java程序打包成jar包上传到先前创建好的私有仓库中去,这样可以在pom.xml中引入即可使用。
JGit
明确了任务目标,接下来就是要完成这个任务,在这里需要使用到JGit插件。如果你想在一个 Java 程序中使用 Git ,有一个功能齐全的 Git 库,那就是 JGit 。 JGit 是一个用 Java 写成的功能相对健全的 Git 的实现,它在 Java 社区中被广泛使用。 JGit 项目由 Eclipse 维护,它的主页在 JGit | The Eclipse Foundation 。
有很多种方式可以让 JGit 连接你的项目,并依靠它去写代码。 最简单的方式也许就是使用 Maven 。你可以通过在你的 pom.xml 文件里的 标签中增加像下面这样的片段来完成这个整合。
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>5.0.1.201806211838-r</version>
</dependency>
注意JGit插件和jdk版本地对应关系,由于本项目中使用的java版本是jdk8,所以JGit插件使用的版本也比较低。
这样之后,再在程序中将它引入即可以使用。
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
JAVA程序
接下来是编写java程序,我创建了以下代码的java程序。
package org.example;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import java.io.File;
import java.io.IOException;
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class GiteeDownloader {
public static void main(String[] args) {
// 示例调用
String remoteUrl = "https://gitee.com/li-zhuang-diligent/java-test.git";
String localPath = "E:/ideaProjects/Clone/src/main/directory";
String username = "123456789";
String password = "*********";
String action = "pull"; // 或 "clone"
downloadGiteeCode(action, remoteUrl, localPath, username, password);
}
public static void downloadGiteeCode(String action, String remoteUrl, String localPath, String username, String password) {
try {
if ("clone".equalsIgnoreCase(action)) {
// Clone 远程仓库到本地目录
System.out.println("Cloning from " + remoteUrl + " to " + localPath);
Git.cloneRepository()
.setURI(remoteUrl)
.setDirectory(new File(localPath))
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password))
.call();
System.out.println("Cloning completed.");
} else if ("pull".equalsIgnoreCase(action)) {
// Pull 更新本地仓库
System.out.println("Pulling updates for " + localPath);
Git.open(new File(localPath))
.pull()
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password))
.call();
System.out.println("Pull completed.");
} else {
System.err.println("Unsupported action: " + action);
}
} catch (GitAPIException | IOException e) {
System.err.println("Exception occurred while " + action + " repository: " + e.getMessage());
e.printStackTrace();
}
}
}
打包成jar包
直接运行mvn deploy就可以将该项目打包成jar包并上传到私人仓库中去。(maven的私人仓库地址和仓库认证如何配置就不在这里介绍。)
测试程序(如何使用)
创建了一个测试程序,在其中的pom.xml文件中引入已经打包好的jar包(引入的仓库地址配置在settings.xml中,在这里也不过多赘述。)
在程序中编写好以下代码,然后点击运行。
package org.example;
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) {
String action="pull";
String remoteUrl = "https://gitee.com/li-zhuang-diligent/java-test.git";
// 本地目录
String localPath = "E:/ideaProjects/TestClone/src/main/directory"; // 请替换为你想要克隆到的本地路径
// Gitee 账号和密码
String username = "123456789";
String password = "*********";
GiteeDownloader.downloadGiteeCode(action,remoteUrl,localPath,username,password);
}
}
“action”:在action字段中有两个可选值,pull和clone,根据需求填写需要的操作。
“remoteUrl”:指定想要拉取的远程的gitee仓库的url地址。
“localPath”:想要克隆到的本地的路径。
“username”:gitee的账号。
“password”:gitee的密码。
相关参数填写完毕,然后执行程序。
即可看见在目标文件夹中拉取到了目标gitee仓库中的代码,这里要注意,在设置localPath的时候,所存的目标文件夹可以不存在,系统会自动创建,但是要保证所存的目标文件夹为空,否则会拉取失败。