1. 소개
이 예제에서는 인터넷에 직접 연결하지 않는 환경에서 일반적인 상황인 프록시 뒤에서 작동 하도록 Maven 을 구성 할 것입니다.
이 예에서 프록시는 'proxy.baeldung.com' 머신에서 실행 중이며 포트 '80'에서 HTTP를 통해 프록시 요청을 수신합니다. 프록시를 거치지 않아도 되는 internal.baeldung.com의 일부 내부 사이트도 사용할 것입니다.
2. 프록시 구성
먼저 자격 증명 없이 기본 프록시 구성을 설정해 보겠습니다 .
일반적으로 ' <user_home>/.m2' 디렉토리 에 있는 Maven settings.xml 을 편집해 보겠습니다. 아직 없는 경우 ' <maven_home>/conf' 디렉터리의 전역 설정에서 복사할 수 있습니다.
이제 < 프록시 > 섹션 내에 < 프록시 > 항목을 생성해 보겠습니다.
<proxies>
<proxy>
<host>proxy.baeldung.com</host>
<port>80</port>
</proxy>
</proxies>
프록시를 거치지 않아도 되는 로컬 사이트도 사용하므로 <nonProxyHosts> 에 '|'를 사용하여 지정하자. localhost로 분리된 List:
<nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
3. 자격 증명 추가
프록시가 Security되지 않은 경우 필요한 전부입니다. 그러나 우리는 프록시 정의에 자격 증명을 추가해 보겠습니다 .
<username>baeldung</username>
<password>changeme</password>
프록시가 원하지 않을 때 사용자 이름/암호 항목이 있으면 요청이 거부될 수 있으므로 필요하지 않은 경우(비어 있는 항목도 포함) 사용자 이름/암호 항목을 추가하지 않습니다 .
이제 최소 인증 구성은 다음과 같아야 합니다.
<proxies>
<proxy>
<host>proxy.baeldung.com</host>
<port>80</port>
<username>baeldung</username>
<password>changeme</password>
<nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
</proxy>
</proxies>
이제 mvn 명령을 실행할 때 프록시를 통해 원하는 사이트에 연결합니다.
3.1. 선택적 항목
프록시를 전환해야 하는 경우에 대비하여 더 쉽게 참조할 수 있도록 'BaeldungProxy_Authenticated' 의 선택적 ID 를 지정해 보겠습니다.
<id>BaeldungProxy_Authenticated</id>
이제 다른 프록시가 있는 경우 다른 프록시 정의를 추가할 수 있지만 하나만 활성화할 수 있습니다. 기본적으로 Maven은 찾은 첫 번째 활성 프록시 정의를 사용합니다 .
프록시 정의는 기본적으로 활성화되어 있으며 암시적 정의를 가져옵니다.
<active>true</active>
다른 프록시를 활성 프록시로 만들려면 <active> 를 false로 설정하여 원래 항목을 비활성화합니다.
<active>false</active>
프록시 프로토콜에 대한 Maven의 기본값은 HTTP 이며 대부분의 경우에 적합합니다. 프록시가 다른 프로토콜을 사용하는 경우 여기에서 선언하고 http 를 프록시에 필요한 프로토콜로 바꿉니다.
<protocol>http</protocol>
이것은 프록시가 사용하는 프로토콜입니다. 요청 프로토콜(ftp://, http://, https://)은 이와는 별개입니다.
선택적 요소를 포함하여 확장된 프록시 정의는 다음과 같습니다 .
<proxies>
<proxy>
<id>BaeldungProxy_Authenticated</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.baeldung.com</host>
<port>80</port>
<username>baeldung</username>
<password>changeme</password>
<nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
</proxy>
</proxies>
이것이 우리의 기본 프록시 항목에 대한 것이지만 우리에게 충분히 안전합니까?
4. 구성 Security
이제 동료 중 한 명이 프록시 구성을 보내달라고 요청한다고 가정해 보겠습니다.
우리는 암호를 일반 텍스트로 전송하는 데 그다지 열중하지 않으므로 Maven이 암호를 얼마나 쉽게 암호화 하는지 살펴보겠습니다 .
4.1. 마스터 비밀번호 생성
먼저 "te!st!ma$ter"와 같이 마스터 암호를 선택합니다.
이제 다음 을 실행할 때 프롬프트에 입력하여 마스터 비밀번호를 암호화해 보겠습니다 .
mvn --encrypt-master-password
Master Password:
Enter 키를 누르면 중괄호로 묶인 암호화된 암호가 표시됩니다.
{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}
4.2. 암호 생성 문제 해결
Master Password: 프롬프트 대신 {}가 표시되면 (bash를 사용할 때 발생할 수 있음) 명령줄에서 암호를 지정해야 합니다.
'!'와 같은 특수 문자가 있는지 확인하기 위해 암호를 따옴표로 묶습니다. 원치 않는 효과가 없습니다.
따라서 bash를 사용하는 경우 작은따옴표를 사용하겠습니다.
mvn --encrypt-master-password 'te!st!ma$ter'
또는 Windows 명령 프롬프트를 사용하는 경우 큰따옴표를 사용하십시오.
mvn --encrypt-master-password "te!st!ma$ter"
이제 생성된 마스터 암호에 중괄호가 포함되는 경우가 있습니다 . 예를 들어 'UD' 뒤에 닫는 중괄호 '}'가 있습니다.
{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}
이 경우 다음 중 하나를 수행할 수 있습니다.
- mvn –encrypt-master-password 명령을 다시 실행 하여 다른 암호를 생성합니다(중괄호 없이 가능).
- '{' 또는 ' }' 앞에 백슬래시를 추가하여 암호의 중괄호를 이스케이프 처리합니다.
4.3. settings-security.xml 파일 생성
이제 이스케이프 처리된 '\}'와 함께 암호화된 비밀번호를 .m2 디렉토리 의 settings-security.xml 파일 에 넣겠습니다 .
<settingsSecurity>
<master>{QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}</master>
</settingsSecurity>
마지막으로 Maven을 사용하면 마스터 요소 내에 어노테이션을 추가할 수 있습니다.
비밀번호 '{' 구분 기호 앞에 텍스트를 추가해 보겠습니다. Maven이 비밀번호를 찾기 위해 { 또는 }를 사용하므로 어노테이션에 { 또는 }를 사용하지 않도록 주의하세요.
<master>We escaped the curly brace with '\' {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}</master>
4.4. 이동식 드라이브 사용
추가 Security이 필요 하고 마스터 비밀번호를 별도의 기기에 저장하고 싶다고 가정해 보겠습니다 .
먼저 이동식 드라이브 "R:"의 구성 디렉토리에 settings-security.xml 파일을 배치합니다.
R:\config\settings-security.xml
이제 .m2 디렉토리의 settings-security.xml 파일을 업데이트하여 Maven을 이동식 드라이브 의 실제 settings-security.xml 로 리디렉션합니다.
<settingsSecurity>
<relocation>R:\config\settings-security.xml</relocation>
</settingsSecurity>
Maven은 이제 이동식 드라이브 의 재배치 요소 에 지정한 파일에서 암호화된 마스터 암호를 읽 습니다.
5. 프록시 암호 암호화
이제 마스터 암호가 암호화되었으므로 프록시 암호를 암호화 할 수 있습니다 .
다음 명령을 실행 하고 프롬프트에 암호 " changeme"를 입력합니다.
mvn --encrypt-password
Password:
암호화된 비밀번호가 표시됩니다.
{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}
마지막 단계는 settings.xml 파일에서 프록시 섹션을 편집하고 암호화된 비밀번호를 입력하는 것입니다 .
<proxies>
<proxy>
<id>BaeldungProxy_Encrypted</id>
<host>proxy.baeldung.com</host>
<port>80</port>
<username>baeldung</username>
<password>{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}</password>
</proxy>
</proxies>
이것을 저장하면 Maven은 이제 암호화된 암호를 사용하여 프록시를 통해 인터넷에 연결할 수 있습니다.
6. 시스템 속성 사용
설정 파일을 통해 Maven을 구성하는 것이 권장되는 접근 방식 이지만 Java 시스템 속성을 통해 프록시 구성을 선언 할 수 있습니다.
운영 체제에 이미 프록시가 구성된 경우 다음을 설정할 수 있습니다.
-Djava.net.useSystemProxies=true
또는 항상 활성화되도록 관리자 권한이 있는 경우 <JRE>/lib/net.properties 파일에서 이를 설정할 수 있습니다.
그러나 Maven 자체는 이 설정을 존중할 수 있지만 모든 플러그인이 그렇게 하는 것은 아니므로 이 방법을 사용하여 여전히 연결 실패를 얻을 수 있습니다.
활성화된 경우에도 http.proxyHost 시스템 속성 에서 HTTP 프록시의 세부 정보를 설정 하여 재정의할 수 있습니다 .
-Dhttp.proxyHost=proxy.baeldung.com
프록시는 기본 포트 80에서 수신하지만 포트 8080에서 수신하는 경우 http.proxyPort 속성 을 구성합니다 .
-Dhttp.proxyPort=8080
프록시 가 필요하지 않은 사이트의 경우 :
-Dhttp.nonLocalHosts="internal.baeldung.com|localhost|127.*|[::1]"
따라서 프록시가 10.10.0.100이면 다음을 사용할 수 있습니다.
mvn compile -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost|127.0.0.1
물론 프록시에 인증이 필요한 경우 다음 도 추가합니다 .
-Dhttp.proxyUser=baeldung
-Dhttp.proxyPassword=changeme
그리고 이러한 설정 중 일부를 모든 Maven 호출에 적용하려면 MAVEN_OPTS 환경 변수에서 정의할 수 있습니다.
set MAVEN_OPTS= -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080
이제 ' mvn ' 을 실행할 때마다 이 설정이 자동으로 적용됩니다 – 종료할 때까지.
7. 결론
이 문서에서는 자격 증명이 있거나 없는 Maven 프록시를 구성하고 암호를 암호화했습니다. 외부 드라이브에 마스터 암호를 저장하는 방법과 시스템 속성을 사용하여 프록시를 구성하는 방법도 살펴보았습니다.
이제 일반 텍스트로 암호를 제공하지 않고 동료와 settings.xml 파일을 공유하고 암호를 암호화하는 방법을 보여줄 수 있습니다!
늘 그렇듯이 이 기사의 예제는 GitHub 에서 사용할 수 있습니다 .