기 존 Jar 가방 을 Maven 사복 에 대량 전송

22350 단어 mavenjar 가방
기본 정보
적용 환경:내부 네트워크 환경 에서 Maven 사복 은 외부 네트워크(또는 벽 을 넘 어야 함)에 연결 할 수 없 으 며,다른 수단 으로 다운로드 한 후 내부 네트워크 사복 으로 가 져 와 야 하 는 경우.
기능 설명:
포 함 된 pom,jar 등 파일 에 의존 하 는 것 은 하나의 단독 디 렉 터 리 에 있어 야 합 니 다.아래 경 로 를 지정 하여 gson 을 사복 에 업로드 할 수 있 습 니 다.
f:\\.m2\\repository\\Gson\\gson 까지 지 정 돼 gson 의 여러 버 전 을 올 릴 수 있다.
창고 아래 에 있 는 모든 jar 가방 의 모든 버 전 을 사복 에 직접 올 릴 수도 있다.
메모:업로드 전에 사복 에 중복 업로드 가 허용 된다 면 사복 설정 에서 redeploy 를 허용 해 야 합 니 다.그렇지 않 으 면 이미 존재 하 는 것 이 잘못 되 었 습 니 다.
Jar 가방 다운로드
단일 jar 패 키 지 를 다운로드 하면 http://mvnrepository.com/ 검색 소 에서 다운로드 할 수 있 습 니 다.다운로드 할 때(연결 에 따라 주 소 를 열 고 pom,jar,source,javadoc 를 다운로드 합 니 다).
프로젝트 에 대한 것 이 라면 새로운 로 컬 창고 경 로 를 설정 할 수 있 습 니 다.
source 와 javadoc 를 다운로드 할 수 있 도록 settings.xml 에 아래 설정 을 추가 합 니 다:

<profiles> 
 <profile> 
  <id>downloadSources</id> 
  <properties> 
   <downloadSources>true</downloadSources> 
<downloadJavadocs>true</downloadJavadocs>      
  </properties> 
 </profile> 
</profiles> 
<activeProfiles> 
 <activeProfile>downloadSources</activeProfile> 
</activeProfiles> 
프로젝트 아래 에서 실행:f:\\.m2\\repository 명령.
실행 완료 후 다시 실행:mvn clean install 다운로드 원본.
javadoc 가 필요 하 다 면 명령 을 수행 할 수 있 습 니 다:mvn dependency:sourcessettings.xml 에 계 정 비밀 번 호 를 설정 해 야 합 니 다.아래 를 참고 하 십시오.

<server>
  <id>thirdpart</id>
  <username>admin</username>
  <password>123456</password>
</server>
업로드 명령
아래 명령 을 사용 하면 사복 에 의존 하여 업로드 할 수 있 습 니 다.

mvn deploy:deploy-file -Durl=file:///home/me/m2-repo -DrepositoryId=some.repo.id -Dfile=./path/to/artifact-name-1.0.jar -DpomFile=./path/to/pom.xml -Dsources=./path/to/artifact-name-1.0-sources.jar -Djavadoc=./path/to/artifact-name-1.0-javadoc.jar
오토 메 이 션
이 명령 을 수 동 으로 사용 하여 업로드 할 때 는 nexus 프론트 데스크 를 통 해 직접 업로드 하 는 것 이 좋 습 니 다.자동 으로 대량으로 업로드 할 수 있 도록 작은 프로그램 을 써 서 이 명령 을 이용 하여 대량 작업 을 할 수 있 습 니 다.
의존 프로그램 을 대량으로 업로드 할 수 있 는 프로그램 을 쓸 때 는 packaging=pom 또는 packaging=bundle 일 경우 특별한 처리 가 필요 합 니 다.pom 시 Dfile DpomFile 두 매개 변 수 를 pom 파일 로 지정 하면 됩 니 다.bundle 시-Dpackaging=jar 를 지정 해 야 합 니 다.jar 시 이 매개 변 수 는 문제 가 없 기 때문에 bundle 이 든 jar 이 든 모두 이 명령 을 가 져 옵 니 다.
다음 시작 코드.

/**
 *       Maven   
 * @author
 * @since
 */
public class Deploy {
  /**
   * mvn -s F:\.m2\settings.xml
   * deploy:deploy-file 
   * -Durl=http://IP:PORT/nexus/content/repositories/thirdpart 
   * -DrepositoryId=thirdpart
   * -Dfile=antlr-2.7.2.jar
   * -DpomFile=antlr-2.7.2.pom
   * -Dpackaging=jar
   * -DgeneratePom=false
   * -Dsources=./path/to/artifact-name-1.0-sources.jar
   * -Djavadoc=./path/to/artifact-name-1.0-javadoc.jar
   */
  public static final String BASE_CMD = "cmd /c mvn " +
      "-s F:\\.m2\\settings.xml " + 
      "deploy:deploy-file " +
      "-Durl=http://IP:PORT/nexus/content/repositories/thirdpart " +
      "-DrepositoryId=thirdpart " +
      "-DgeneratePom=false";
  public static final Pattern DATE_PATTERN = Pattern.compile("-[\\d]{8}\\.[\\d]{6}-");
  public static final Runtime CMD = Runtime.getRuntime();
  public static final Writer ERROR;
  public static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(10);
첫 번 째 부분 부터 볼 게 요.BASECMD 는 기본 명령 부분 이다.
  • cmd/c 는 자바 의 runtime 을 사용 하여 명령 을 수행 할 때 명령 을 찾 을 수 있 습 니 다.
  • -s F:\\.m2\\settings.xml 매개 변 수 는 설정 파일 의 경 로 를 지정 합 니 다.
  • deploy:deploy-file 은 파일 을 업로드 하 는 명령 입 니 다.
  • -Durl=xxx 는 업로드 위 치 를 지정 하여 nexus 에서 이 주 소 를 찾 을 수 있 습 니 다.
  • -Dreposcory Id=thirdpart 는 위 에서 지정 한 주소 와 일치 해 야 합 니 다.nexus 창고 설정 에서 이 id 를 볼 수 있 습 니 다.또한 위 에서 언급 한 settings.xml 의 사용자 비밀 번 호 는 이 id 와 일치 해 야 합 니 다.
  • -DgeneatePom=false 는 pom 파일 을 전송 하기 때문에 자동 생 성 을 사용 하지 않 습 니 다.
  • 뒤의 mvn dependency:resolve -Dclassifier=javadoc 은 주로 스냅 샷 이 존재 할 때 날짜 형식의 버 전 을 무시 하고 DATE_PATTERN 형식 만 보류 합 니 다.
    그 다음 에 SNAPSHOT 과 스 레 드 풀 을 얻 었 습 니 다.
    계속 코드.
    
      static {
        Writer err = null;
        try {
          err = new OutputStreamWriter(new FileOutputStream("deploy-error.log"), "utf-8");
        } catch (Exception e) {
          e.printStackTrace();
          System.exit(0);
        }
        ERROR = err;
      }
      public static void error(String error){
        try {
          System.err.println(error);
          ERROR.write(error + "
    "); ERROR.flush(); } catch (IOException e) { e.printStackTrace(); } }
    잘못된 정 보 를 기록 하기 위해 파일 을 만 들 었 고 정적 인 방법 을 제공 하여 편리 하 게 사용 할 수 있 습 니 다.
    다음은 매개 변수 검사 와 알림 정보 입 니 다.
    
      public static boolean checkArgs(String[] args){
        if (args.length != 1) {
          System.out.println("   : java -jar Deploy D:\\some\\path\\");
          return false;
        }
        File file = new File(args[0]);
        if (!file.exists()) {
          System.out.println(args[0] + "      !");
          return false;
        }
        if (!file.isDirectory()) {
          System.out.println("       !");
          return false;
        }
        return true;
      }
    다음 방법 으로 pom 파일 의 packaging 이 pom 인지 판단 합 니 다.
    
      public static boolean packingIsPom(File pom){
        BufferedReader reader = null;
        try {
          BufferedReader reader = 
           new BufferedReader(new InputStreamReader(new FileInputStream(pom)));
          String line;
          while((line = reader.readLine()) != null){
            if(line.trim().indexOf("<packaging>pom</packaging>")!=-1){
              return true;
            }
          }
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
         try{reader.close();}catch(Exception e){}
        }
        return false;
      }
    pom 형식 일 때 pom 만 올 려 주세요.
    
    public static void deployPom(final File pom) {
        EXECUTOR_SERVICE.execute(new Runnable() {
          @Override
          public void run() {
            StringBuffer cmd = new StringBuffer(BASE_CMD);
            cmd.append(" -DpomFile=").append(pom.getName());
            cmd.append(" -Dfile=").append(pom.getName());
            try {
              final Process proc = CMD.exec(cmd.toString(), null, pom.getParentFile());
              InputStream inputStream = proc.getInputStream();
              InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
              BufferedReader reader = new BufferedReader(inputStreamReader);
              String line;
              StringBuffer logBuffer = new StringBuffer();
              logBuffer.append("


    =====================================
    "); while((line = reader.readLine()) != null){ if (line.startsWith("[INFO]") || line.startsWith("Upload")) { logBuffer.append( Thread.currentThread().getName() + " : " + line + "
    "); } } System.out.println(logBuffer); int result = proc.waitFor(); if(result != 0){ error(" :" + pom.getAbsolutePath()); } } catch (IOException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } catch (InterruptedException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } } }); }
    DpomFile 과 Dfile 이 지정 한 pom 파일 을 주의 하 십시오.
    업로드 한 파일 이 jar 를 포함 할 때 아래 방식 을 사용 합 니 다.
    
      public static void deploy(
       final File pom, final File jar, final File source, final File javadoc) {
        EXECUTOR_SERVICE.execute(new Runnable() {
          @Override
          public void run() {
            StringBuffer cmd = new StringBuffer(BASE_CMD);
            cmd.append(" -DpomFile=").append(pom.getName());
            if(jar != null){
              //  bundle   ,            jar    .jar
              cmd.append(" -Dpackaging=jar -Dfile=").append(jar.getName());
            } else {
              cmd.append(" -Dfile=").append(pom.getName());
            }
            if(source != null){
              cmd.append(" -Dsources=").append(source.getName());
            }
            if(javadoc != null){
              cmd.append(" -Djavadoc=").append(javadoc.getName());
            }
            try {
              final Process proc = CMD.exec(cmd.toString(), null, pom.getParentFile());
              InputStream inputStream = proc.getInputStream();
              InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
              BufferedReader reader = new BufferedReader(inputStreamReader);
              String line;
              StringBuffer logBuffer = new StringBuffer();
              logBuffer.append("


    =====================================
    "); while((line = reader.readLine()) != null){ if (line.startsWith("[INFO]") || line.startsWith("Upload")) { logBuffer.append( Thread.currentThread().getName() + " : " + line + "
    "); } } System.out.println(logBuffer); int result = proc.waitFor(); if(result != 0){ error(" :" + pom.getAbsolutePath()); } } catch (IOException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } catch (InterruptedException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } } }); }
    pom 과 jar,source,javadoc 가 있어 야 합 니 다.
    다음은 위의 코드 를 봉인 한 방법 입 니 다.이 방법 은 pom,jar,source,javadoc 를 포함 한 디 렉 터 리 와 파일 을 반복 적 으로 찾 는 데 사 용 됩 니 다.
    
      public static void deploy(File[] files) {
        if (files.length == 0) {
          //ignore
        } else if (files[0].isDirectory()) {
          for (File file : files) {
            if (file.isDirectory()) {
              deploy(file.listFiles());
            }
          }
        } else if (files[0].isFile()) {
          File pom = null;
          File jar = null;
          File source = null;
          File javadoc = null;
          //        ,  xxx-mySql-2.2.6-20170714.095105-1.jar
          for (File file : files) {
            String name = file.getName();
            if(DATE_PATTERN.matcher(name).find()){
              //skip
            } else if (name.endsWith(".pom")) {
              pom = file;
            } else if (name.endsWith("-javadoc.jar")) {
              javadoc = file;
            } else if (name.endsWith("-sources.jar")) {
              source = file;
            } else if (name.endsWith(".jar")) {
              jar = file;
            }
          }
          if(pom != null){
            if(jar != null){
              deploy(pom, jar, source, javadoc);
            } else if(packingIsPom(pom)){
              deployPom(pom);
            }
          }
        }
      }
    main 방법 에는 두 가지 호출 방식 이 있다.
    
      public static void main(String[] args) {
        deploy(new File("F:\\.m2\\repository").listFiles());
        EXECUTOR_SERVICE.shutdown();
        try {
          ERROR.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    창고 의 디 렉 터 리 를 직접 지정 하면 됩 니 다.
    더 구체 적 인 디 렉 터 리 일 수도 있 습 니 다.CMD명령 행 을 통 해 디 렉 터 리 를 호출 하려 면 아래 main 방법 을 사용 하 십시오.
    
      public static void main(String[] args) {
        if(checkArgs(args)){
          File file = new File(args[0]);
          deploy(file.listFiles());
        }
        EXECUTOR_SERVICE.shutdown();
        try {
          ERROR.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    위의 이런 방식 을 통 해 쉽게 사복 에 의존 할 수 있다.위의 url 인 자 를 deploy(new File("F:\\.m2\\repository\\org\\apache\\tomcat\\xxx\\1.0.0\\").listFiles()); 으로 수정 하면 로 컬 창고 에 포장 할 수 있 습 니 다.
    내부 망 에서 사복 을 사용 하 는 경 우 는 흔 치 않 지만 이런 상황 이 발생 하면 이 코드 를 사용 하여 jar 가방 을 대량으로 전달 하 는 것 이 쉬 워 집 니 다.
    전체 코드
    
    import java.io.*;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.regex.Pattern;
    /**
     *       Maven   
     * @author 
     * @since
     */
    public class Deploy {
      /**
       * mvn -s F:\.m2\settings.xml
       * org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file
       * -Durl=http://IP:PORT/nexus/content/repositories/thirdpart
       * -DrepositoryId=thirdpart
       * -Dfile=antlr-2.7.2.jar
       * -DpomFile=antlr-2.7.2.pom
       * -Dpackaging=jar
       * -DgeneratePom=false
       * -Dsources=./path/to/artifact-name-1.0-sources.jar
       * -Djavadoc=./path/to/artifact-name-1.0-javadoc.jar
       */
      public static final String BASE_CMD = "cmd /c mvn " +
          "-s F:\\.m2\\settings.xml " + 
          "deploy:deploy-file " +
          "-Durl=http://IP:PORT/nexus/content/repositories/thirdpart " +
          "-DrepositoryId=thirdpart " +
          "-DgeneratePom=false";
      public static final Pattern DATE_PATTERN = Pattern.compile("-[\\d]{8}\\.[\\d]{6}-");
      public static final Runtime CMD = Runtime.getRuntime();
      public static final Writer ERROR;
      public static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(10);
      static {
        Writer err = null;
        try {
          err = new OutputStreamWriter(new FileOutputStream("deploy-error.log"), "utf-8");
        } catch (Exception e) {
          e.printStackTrace();
          System.exit(0);
        }
        ERROR = err;
      }
      public static void main(String[] args) {
        deploy(new File("F:\\.m2\\repository").listFiles());
    //    if(checkArgs(args)){
    //      File file = new File(args[0]);
    //      deploy(file.listFiles());
    //    }
        EXECUTOR_SERVICE.shutdown();
        try {
          ERROR.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      public static void error(String error){
        try {
          System.err.println(error);
          ERROR.write(error + "
    "); ERROR.flush(); } catch (IOException e) { e.printStackTrace(); } } public static boolean checkArgs(String[] args){ if (args.length != 1) { System.out.println(" : java -jar Deploy D:\\some\\path\\"); return false; } File file = new File(args[0]); if (!file.exists()) { System.out.println(args[0] + " !"); return false; } if (!file.isDirectory()) { System.out.println(" !"); return false; } return true; } public static void deploy(File[] files) { if (files.length == 0) { //ignore } else if (files[0].isDirectory()) { for (File file : files) { if (file.isDirectory()) { deploy(file.listFiles()); } } } else if (files[0].isFile()) { File pom = null; File jar = null; File source = null; File javadoc = null; // , xxx-mySql-2.2.6-20170714.095105-1.jar for (File file : files) { String name = file.getName(); if(DATE_PATTERN.matcher(name).find()){ //skip } else if (name.endsWith(".pom")) { pom = file; } else if (name.endsWith("-javadoc.jar")) { javadoc = file; } else if (name.endsWith("-sources.jar")) { source = file; } else if (name.endsWith(".jar")) { jar = file; } } if(pom != null){ if(jar != null){ deploy(pom, jar, source, javadoc); } else if(packingIsPom(pom)){ deployPom(pom); } } } } public static boolean packingIsPom(File pom){ BufferedReader reader = null; try { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(pom))); String line; while((line = reader.readLine()) != null){ if(line.trim().indexOf("<packaging>pom</packaging>")!=-1){ return true; } } } catch (Exception e) { e.printStackTrace(); } finally { try{reader.close();}catch(Exception e){} } return false; } public static void deployPom(final File pom) { EXECUTOR_SERVICE.execute(new Runnable() { @Override public void run() { StringBuffer cmd = new StringBuffer(BASE_CMD); cmd.append(" -DpomFile=").append(pom.getName()); cmd.append(" -Dfile=").append(pom.getName()); try { final Process proc = CMD.exec(cmd.toString(), null, pom.getParentFile()); InputStream inputStream = proc.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader reader = new BufferedReader(inputStreamReader); String line; StringBuffer logBuffer = new StringBuffer(); logBuffer.append("


    ==================================
    "); while((line = reader.readLine()) != null){ if (line.startsWith("[INFO]") || line.startsWith("Upload")) { logBuffer.append(Thread.currentThread().getName() + " : " + line + "
    "); } } System.out.println(logBuffer); int result = proc.waitFor(); if(result != 0){ error(" :" + pom.getAbsolutePath()); } } catch (IOException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } catch (InterruptedException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } } }); } public static void deploy(final File pom, final File jar, final File source, final File javadoc) { EXECUTOR_SERVICE.execute(new Runnable() { @Override public void run() { StringBuffer cmd = new StringBuffer(BASE_CMD); cmd.append(" -DpomFile=").append(pom.getName()); if(jar != null){ // bundle , jar .jar cmd.append(" -Dpackaging=jar -Dfile=").append(jar.getName()); } else { cmd.append(" -Dfile=").append(pom.getName()); } if(source != null){ cmd.append(" -Dsources=").append(source.getName()); } if(javadoc != null){ cmd.append(" -Djavadoc=").append(javadoc.getName()); } try { final Process proc = CMD.exec(cmd.toString(), null, pom.getParentFile()); InputStream inputStream = proc.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader reader = new BufferedReader(inputStreamReader); String line; StringBuffer logBuffer = new StringBuffer(); logBuffer.append("


    =======================================
    "); while((line = reader.readLine()) != null){ if (line.startsWith("[INFO]") || line.startsWith("Upload")) { logBuffer.append(Thread.currentThread().getName() + " : " + line + "
    "); } } System.out.println(logBuffer); int result = proc.waitFor(); if(result != 0){ error(" :" + pom.getAbsolutePath()); } } catch (IOException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } catch (InterruptedException e) { error(" :" + pom.getAbsolutePath()); e.printStackTrace(); } } }); } }
    사용 방식
    1.항목 을 가 져 와 main 방법 을 직접 실행 합 니 다.
    2.자바 c 를 클 라 스 로 컴 파일 한 후 실행 합 니 다.코드 에 중국어 가 존재 하기 때문에 자바 코드 는 utf 8 형식 으로 저장 해 야 합 니 다.컴 파일 할 때-encoding utf 8 매개 변 수 를 통 해 지정 합 니 다.
    총결산
    이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.

    좋은 웹페이지 즐겨찾기