기 존 Jar 가방 을 Maven 사복 에 대량 전송
적용 환경:내부 네트워크 환경 에서 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:sources
settings.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 는 기본 명령 부분 이다.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 매개 변 수 를 통 해 지정 합 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Windows에서 CodeArtifact(Maven)용 토큰을 자동으로 생성하는 방법CodeArtifact를 사용한 적이 있거나 사용할 계획이라면 매일 모든 Maven 프로젝트에서 수동으로 토큰(CODEARTIFACT_AUTH_TOKEN)을 생성해야 합니다. 이는 어려울 수 있으며 개발 속도를 늦출...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.