JAVA后端程序拉取私人仓库的npm包并将该程序打包成jar包

        当前有一个系统用于导出项目,而每次导出的项目并不可以直接使用,需要手动从npm私人仓库中获取一个npm包然后将他们整合到一起它才是一个完整的项目,所以目前我的任务就是编写一个java程序可以自动地从npm私人仓库拉取下来那个模板代码到指定地路径上去。并且我还要将这个java程序打包成jar包上传到先前创建好的maven私有仓库中去,这样可以在pom.xml中引入即可使用。

HttpClient

        Apache HttpClient 是一个用于发送 HTTP 请求的客户端库,常用于 Java 应用程序中处理 HTTP 请求和响应。

        有很多种方式可以让HttpClien连接你的项目,并依靠它去写代码。 最简单的方式也许就是使用 Maven 。你可以通过在你的 pom.xml 文件里的 标签中增加像下面这样的片段来完成这个整合。

<dependency>

   <groupId>org.apache.httpcomponents</groupId>

   <artifactId>httpclient</artifactId>

  <version>4.5.13</version> <!-- 确保使用合适的版本 -->

 </dependency>

        这样之后,再在程序中将它引入即可以使用。

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.CredentialsProvider;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.BasicCredentialsProvider;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.util.EntityUtils;



import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URLEncoder;

import java.nio.charset.StandardCharsets;

JAVA程序

        接下来是编写java程序,我创建了以下代码的java程序。

package org.example;



import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.CredentialsProvider;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.BasicCredentialsProvider;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClientBuilder;

import org.apache.http.util.EntityUtils;



import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URLEncoder;

import java.nio.charset.StandardCharsets;



public class NpmDownloader {



    private static final String REPO_URL = "http://localhost/repository/yb-npm/";

    private static final String PACKAGE_NAME = "@yunbin/yunbin-ui";

    private static final String VERSION = "1.0.0";

    private static final String USERNAME = "admin";

    private static final String PASSWORD = "admin123";

    private static final String DOWNLOAD_DIR = "E:/ideaProjects/CloneNpm/src/main/directory"; // e.g., "C:/downloads"



    public static void main(String[] args) {

        try {

            downloadNpmPackage(REPO_URL, PACKAGE_NAME, VERSION, USERNAME, PASSWORD, DOWNLOAD_DIR);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }



    public static void downloadNpmPackage(String REPO_URL, String packageName, String version, String USERNAME, String PASSWORD, String DOWNLOAD_DIR) throws IOException {

        String encodedPackageName = URLEncoder.encode(packageName, StandardCharsets.UTF_8.toString());

        // 构建正确的包下载路径

        String url = REPO_URL + encodedPackageName + "/-/" + packageName.substring(packageName.indexOf('/') + 1) + "-" + version + ".tgz";



        // 创建下载目录(如果不存在)

        File downloadDir = new File(DOWNLOAD_DIR);

        if (!downloadDir.exists()) {

            if (!downloadDir.mkdirs()) {

                throw new IOException("Failed to create directory: " + DOWNLOAD_DIR);

            }

        }



        CredentialsProvider credsProvider = new BasicCredentialsProvider();

        credsProvider.setCredentials(

                AuthScope.ANY,

                new UsernamePasswordCredentials(USERNAME, PASSWORD));



        try (CloseableHttpClient client = HttpClientBuilder.create()

                .setDefaultCredentialsProvider(credsProvider)

                .build()) {

            HttpGet request = new HttpGet(url);

            try (CloseableHttpResponse response = client.execute(request)) {

                if (response.getStatusLine().getStatusCode() == 200) {

                    try (InputStream inputStream = response.getEntity().getContent();

                         OutputStream outputStream = new FileOutputStream(DOWNLOAD_DIR + "/" + packageName.substring(packageName.indexOf('/') + 1) + "-" + version + ".tgz")) {

                        byte[] buffer = new byte[1024];

                        int bytesRead;

                        while ((bytesRead = inputStream.read(buffer)) != -1) {

                            outputStream.write(buffer, 0, bytesRead);

                        }

                    }

                    System.out.println("Package downloaded successfully.");

                } else {

                    System.out.println("Failed to download package. Status code: " +

                            response.getStatusLine().getStatusCode());

                }

            }

        }

    }

}

打包成jar包

        直接运行mvn deploy就可以将该项目打包成jar包并上传到私人仓库中去。(maven的私人仓库地址和仓库认证如何配置就不在这里介绍。)

测试程序(如何使用)

        创建了一个测试程序,在其中的pom.xml文件中引入已经打包好的jar包(引入的仓库地址配置在settings.xml中,在这里也不过多赘述。)

        在程序中编写好以下代码,然后点击运行。

package org.example;

import java.io.IOException;



public class Main {

    public static void main(String[] args) throws IOException {

        String REPO_URL = "http://localhost:8081/repository/yb-npm/";

        String PACKAGE_NAME = "@yunbin/yunbin-ui";

        String VERSION = "1.0.0";

        String USERNAME = "admin";

        String PASSWORD = "admin123";

        String DOWNLOAD_DIR = "E:/ideaProjects/testCloneNpm/src/main/directory"; // e.g., "C:/downloads"

        NpmDownloader.downloadNpmPackage(REPO_URL,PACKAGE_NAME,VERSION,USERNAME,PASSWORD,DOWNLOAD_DIR);

    }

}

        即可看见在目标文件夹中拉取到了目标私人仓库中的代码,这里要注意,在设置DOWNLOAD_DIR的时候,所存的目标文件夹可以不存在程序会自动创建该文件夹,根据该路径将拉取下来的npm包存储到该目标文件夹中,如果该文件夹里已有内容,程序会依据同名覆盖的原则进行覆盖。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Linux 环境中,你可以使用 Shell 脚本来自动化执行 Git 拉取 Spring Boot 项目的操作,并将其打包 WAR 文件。以下是一个示例的 Shell 脚本: ```bash #!/bin/bash # 进入项目目录 cd /path/to/your/project # 拉取最新代码 git pull # 编译项目 javac -d target/classes src/main/java/*.java # 复制静态资源文件 cp -r src/main/resources/* target/classes/ # 创建 WEB-INF 目录并复制编译后的类文件 mkdir -p target/WEB-INF/classes cp -r target/classes/* target/WEB-INF/classes/ # 创建 web.xml 文件(根据实际需求自定义内容) echo '<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Your Project</display-name> </web-app>' > target/WEB-INF/web.xml # 打包 WAR 文件 jar -cvf yourproject.war -C target . # 清理编译生的文件 rm -rf target/classes target/WEB-INF echo "WAR 文件生" ``` 在脚本中,你需要将 `/path/to/your/project` 替换你实际的项目路径。执行该脚本后,它会自动拉取最新的代码,编译项目,复制静态资源文件,创建部署描述文件(`web.xml`),然后将项目打包 WAR 文件(`yourproject.war`)。最后,在完打包后,会打印出 "WAR 文件生" 的提示信息。 请确保在执行脚本之前,已经正确安装了 Git、Java 和 Maven,并且配置了正确的环境变量。另外,根据你的项目需求,你可能需要根据实际情况进行一些调整和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值