Check! Maven 창고의 사전 처리 메커니즘 이해
Prologue
어떤 프로젝트에서 저는 마븐 창고의 예처리를 책임지고 유지보수를 할 것입니다. 항상 혼란스러우므로 기사에 넣고 정리를 시도할 것입니다.🤯
여기에는 독자 창고나 OSSRH(Central Repository)의 성과를 미리 저장하는 방법에 대한 조사를 적어야 한다.또한 우리측은 자바를 이용한 개발 경험이 부족하기 때문에 잘못된 지적이나 더 좋은 방법이 있으면 댓글을 남겨주세요!
창고를 미리 처리하는 구조(외관 모방)
먼저 Maven 패키지는 Central Repository 에서 관리합니다.
오픈 소스로 등록하려면 Sonatype에서 관리하는 OSSRH(Open Source Software Repository Hosting)를 사용합니다.이 글도 OSSRH를 활용한 구상이다.
OSSRH의 창고를 통해 Central Repository로 사전 처리하기 위해 OSSRH의 제본 창고를 사전 처리한 뒤 Repository Manager의 GUI를 활용해 공개한다.또한 사전에 이름 공간에 로그인하거나 접근 허가를 요청해야 한다.자세한 내용은 아래의 지침을 참고하시오.(이곳에서 전임자가 이미 일을 끝냈기 때문에 나는 먼저 이야기하지 않겠다.)
여기서 다음과 같이 정리한다.
pom.xml과settings.xml, settings-security.xml 복습
처음 일을 시작했을 때 이 서류들도 잘 이해하지 못해서 먼저 적어 두었다😳
우선,pom.xml은 프로젝트 설정을 기술하는 파일입니다.
settings.xml은 프로젝트와 무관한 설정으로
${maven.home}/conf/settings.xml
또는 ${user.home}/.m2/settings.xml
에 설정되어 있습니다.settings-security.xml은 암호화를 사용할 때 암호화된 주 암호를 저장하는 파일입니다.
주 암호를 다음과 같이 암호화합니다. settings-security.xml에 기술합니다.(샘플 코드로 표시된 암호화 문자열은 위조입니다.)
mvn --encrypt-master-password <password>
{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}
${user.home}/.m2/settings-security.xml 샘플<settingsSecurity>
<master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>
서버 암호를 암호화하려면 다음 명령을 실행하고 출력된 문자열을 settings로 설정하십시오.xml에 기술합니다.(샘플 코드로 표시된 암호화 문자열은 위조입니다.)mvn --encrypt-password <password>
{COQLCE6DU6GtcS5P=}
settings.xml 샘플<settings>
...
<servers>
<server>
<id>my.server</id>
<username>foo</username>
<password>{COQLCE6DU6GtcS5P=}</password>
</server>
</servers>
...
</settings>
자세한 내용은 아래의 내용을 확인하세요.자체 Nexus Repository Manager 준비
그럼 갑자기 OSSRH 디자인을 시도하는 게 불안해서 제가 창고를 만들어 연습을 했습니다.
OSSRH는 호스트 웨어하우스Sonatype Nexus Repository Manager를 위해 사용되므로 여기서도 사용됩니다.최신 버전은 3이며 OSSRH와 함께 2를 선택합니다.여기서 구축·설정에 대해서는 상세히 처리하지 않지만, 아래는 참고가 됩니다.
Repository 관리자를 시작하면 Maven2용 창고가 추가됩니다.
연결 정보를 볼 수 있는 Summary 탭을 엽니다.
창고에 연결된 설정
창고에 대한 연결 정보,pom.xml과settings.xml에 기술합니다.
프로젝트pom.xml에 기술된
<distributionManagement>
블록은 창고의 URL을 지정합니다.<repository>
와 <snapshotRepository>
의 차이는 후자가 <version>
의 끝에 -SNAPSHOT
가 함유되어 있는 상황에서 먼저 처리한다는 것이다.그리고 settings.xml에서 인증 창고에 사용되는 사용자 이름과 비밀번호를 기술합니다.
<password>
의 값은 암호화된 암호를 지정합니다.pom.xml
<distributionManagement>.<repository>.<id>
과settings.xml <servers>.<server>.<id>
과 일치하는 문자열입니다.창고에 저장할 때
자체 창고라면 위에서 설명한 Repository 관리자를 통해 확인할 수 있습니다.이 글은 창고를 미리 저장하는 것을 전제로 한다.
pom.xml 샘플(창고를 준비할 때)
<project>
<groupId>com.example.your-project<groupId>
<artifactId>your-artifact</artifactId>
<version>0.0.1</version>
...
<distributionManagement>
<repository>
<id>your-repository</id>
<url>http://<your server>:8081/nexus/content/repositories/your-repository</url>
</repository>
</distributionManagement>
</project>
settings.xml 샘플(창고를 준비할 때)<settings>
<servers>
<server>
<id>your-repository</id>
<username>your-username</username>
<password>{encrypted password}</password>
</server>
</servers>
</settings>
OSSRH를 대상으로 하는 경우
OSSRH를 대상으로 할 때는 다음과 같습니다.
pom.xml 샘플(OSSRH 시)
<project>
...
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
settings.xml 샘플(OSSRH 시)<settings>
<servers>
<server>
<id>ossrh</id>
<username>your-jira-id</username>
<password>{encrypted password}</password>
</server>
</servers>
</settings>
자세한 내용은 아래 내용을 참고하시오.GPG 서명
Maven GPG plugin를 사용하여 GPG 서명을 할 수 있습니다.다음을 참고하여 설정합니다.
또한 GPG 키는 사전 제작(또는 가져오기)이 필요합니다.자세한 건 여기를 확인해 주세요.
pom.xml 샘플
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
<configuration>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
settings.xml 샘플<settings>
<servers>
<!-- encrypted private key passphrase -->
<server>
<id>your.keyname</id>
<passphrase>clear or encrypted text</passphrase>
</server>
</servers>
...
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.keyname>${gpg.keyname}</gpg.keyname>
<gpg.passphraseServerId>${gpg.keyname}</gpg.passphraseServerId>
</properties>
</profile>
</profiles>
</settings>
mvn deploy에 암호를 입력하는 GUI가 나타날 때의 처리
상술한pom.xml 샘플에도 다음과 같은 부분이 기재돼 있는데, GPG 버전에 따라 실행 중 암호문을 입력하는 GUI 입력 화면이 열릴 수 있어 이를 처리한다.
<configuration>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
이 사양은 GPG2.1과 달리 settings입니다.xml에서 암호문을 입력하려면 mvn deploy
명령의 gpg
옵션에서 --pinentry-mode
을 지정해야 합니다.상세한 상황은 아래의 문장을 참조하시오.Tips: 속성에 따라 GPG 서명 유무를 전환
또한 개발 시 구축에 GPG 서명을 포함할 필요가 없기 때문에 프로필build로 조건을 지정할 때만 포함하는 것이 좋습니다.다음은 참조입니다.
Maven 태그를 사용하여 GPG 플러그인을 실행하지 않습니다.서명할 때만 지령
loopback
을 통해 전달된다.pom.xml 샘플
<profiles>
<profile>
<id>release-sign-artifacts</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
디버그 플러그인 구성
디버깅을 할 플러그인이 많습니다. 넥서스-staging-maven-pluggin 또는 maven-deploy-plugin를 사용할 수 있습니다.여기에는 마ven-deploy-pluggin을 사용합니다.
pom.xml 샘플
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</build>
명령 프로그램
준비되면 디버깅을 시도해 보세요!
터미널에서 디버깅 명령을 실행합니다.
-DperformRelease=true
위의 방법을 사용하여 GPG 서명을 전환한 사용자는 다음과 같이 옵션을 지정합니다.mvn clean deploy
구축이 순조롭게 진행되어 표시mvn clean deploy -DperformRelease=true
가 성공했습니다!🎉[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ your-artifact ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:17 min
[INFO] Finished at: 2020-12-01T05:52:12Z
[INFO] ------------------------------------------------------------------------
Epilogue
이 내용은 원래 어떤 자동화 코드를 바탕으로 계승한 것인데, 바로 정확한 답이 있기 때문에 어떻게 해결해야 할지 생각하면 매우 어렵다.
고전했던 GPG 서명...어쨌든 패스 어구의 대화 상자는 고민을 표시하며 해결책을 찾았다.현재 가동 중인 환경에서 GPG 버전이 오래된 것인지 오래된 것인지 여력이 있다면 조사하고 싶다.
그래서 사실 이걸 GiitHub Actions의 작업 절차로 만들고 싶어서 다른 글을 썼어요!기대해주세요!🙌
Reference
이 문제에 관하여(Check! Maven 창고의 사전 처리 메커니즘 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/dzeyelid/articles/76d61c51522594f9a8c7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)