2012-07-03 2 views
4

Mojo의 등록 정보 노드와 같이 Maven의 비밀번호 암호화를 사용하고 싶습니다. 나는 암호화 된 패스워드를 mojo의 올바른 속성에 붙여 넣으려고했지만 일반 텍스트로 취급했다. 내가 희망을 내가 Mojo 속성에 대한 주석을 설정할 수있는 속성이 있었는데, 그것이 암호화 될 수 있다고 설명하고, 그렇다면 시스템 마스터 암호를 사용하여 암호를 해독했지만 아무 것도 볼 수 없다. 그것을위한 문서화.다른 등록 정보에 대한 Maven 암호 암호화

아무도 서버 비밀번호 노드 이외에 Maven의 비밀번호 암호화를 사용할 수 있습니까? 제 모조를 위해이 일을하고 싶습니다.

답변

3

아니 완전한 답변, 그러나 희망 올바른 방향으로 포인터 ... maven-scm-plugin, maven-release-plugin

tomcat6-maven-plugin 모두 ${user.home}/.m2/settings.xml 파일의 <servers> 섹션에서 암호를 읽을 수 있습니다.

아마도 이러한 플러그인/목표의 소스 코드를 보면 원하는 작업을 수행 할 수있는 Maven 핵심 또는 공유 구성 요소를 찾을 수 있으며 필요에 맞게 수정할 수 있습니다.

+0

와우! 감사합니다 @ user944849! 파기가 약간 걸렸지 만, maven-scm-plugin에서 시작하는 것이 트릭을 만들었습니다.그 소스는 복잡하지 않습니다. Maven 2를 사용하는 경우, 해독을 수행하는 Plexus 구성 요소를 포함해야합니다. – Colselaw

1

이 코드를 샘플 SqlExecMojo으로보십시오. 플러그인에 있다면 암호를 가져와 해독 할 수 있습니다. 리소스 플러그인에서 속성을 필터링하는 데이 속성을 사용하려면 리소스 플러그인의 사용자 지정 버전을 작성해야 할 것입니다. 비슷한 문제가 생길 수도 있습니다.

+0

예 - 실제로는 동일합니다. 미안해, 먼저 다른 의견을 들었어. – Colselaw

+0

@Usman ismail : 링크에 액세스 할 수 없습니다. 사용자 이름과 비밀번호를 묻는 메시지가 나타납니다. –

+0

@Vinayak는 끊어진 링크를 업데이트했습니다. –

1

@ user944849 나는 올바른 방향으로 시작했고, 여기에 해결책이 있습니다.

<dependency> 
    <groupId>org.sonatype.plexus</groupId> 
    <artifactId>plexus-sec-dispatcher</artifactId> 
    <version>1.4</version> 
    <scope>compile</scope> 
</dependency> 

그리고 src/main/resources/META-INF/plexus/components.xml에 다음을 넣어 : 당신이 메이븐 2를 사용하는 경우

, 당신은 당신의 모조에 다음 종속성을 추가 할 필요가 모조에 그런

<?xml version="1.0" encoding="utf-8" ?> 
<component-set> 
    <components> 
    <component> 
     <role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role> 
     <role-hint>mng-4384</role-hint> 
     <implementation>org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher</implementation> 
     <requirements> 
     <requirement> 
      <role>org.sonatype.plexus.components.cipher.PlexusCipher</role> 
      <role-hint>mng-4384</role-hint> 
      <field-name>_cipher</field-name> 
     </requirement> 
     </requirements> 
     <configuration> 
     <_configuration-file>~/.m2/settings-security.xml</_configuration-file> 
     </configuration> 
    </component> 
    <component> 
     <role>org.sonatype.plexus.components.cipher.PlexusCipher</role> 
     <role-hint>mng-4384</role-hint> 
     <implementation>org.sonatype.plexus.components.cipher.DefaultPlexusCipher</implementation> 
    </component> 
    </components> 
</component-set> 

를 얻을 보통의 속성으로서의 패스워드, 및 roleHint를 가지는 컴퍼넌트로서 SecDispatcher를 포함합니다. Stringdecrypt 메서드는 Maven으로 암호화 된 문자열이 아닌 경우 문자열 자체를 반환합니다.

import org.apache.maven.plugin.AbstractMojo; 
import org.apache.maven.plugin.MojoExecutionException; 
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; 
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException; 

/** 
* @goal echopass 
* 
* @phase process-sources 
*/ 
public class MyMojo extends AbstractMojo { 
    /** 
    * The password 
    * @parameter expression="${password}" 
    */ 
    private String password; 

    /** 
    * Plexus component for the SecDispatcher 
    * @component roleHint="mng-4384" 
    */ 
    private SecDispatcher secDispatcher; 

    private String decrypt(String input) { 
    try { 
     return secDispatcher.decrypt(input); 
    } catch (SecDispatcherException sde) { 
     getLog().warn(sde.getMessage()); 
     return input; 
    } 
    } 

    public void execute() throws MojoExecutionException { 
    String s = decrypt(password); 
    getLog().info("The password is " + s); 
    } 
} 

문자열은 프로필에 settings.xml의 속성에있을 수 있습니다, 또는 당신은 명령 줄에서 시스템 속성으로 암호화 된 문자열을 전달할 수 있습니다. Colselaws 솔루션 내가 널 포인터 예외를 얻고 있었다 사용

+0

나는이 문제를 다루고 있으며 도움이 될 것입니다. 내 secDispatcher에 null 포인터 예외가 발생합니다. "같은 RoleHint를 가진 구성 요소로 SecDispatcher"라고 말합니다. 내 플러그인을 사용하여 프로젝트의 pom에서 이것을 정의합니까? 이 프로젝트에서 여전히 돈이 들었습니까? 감사. – PandaBearSoup

0

:

참조. SecDispatcher 구성 요소가 설정되지 않았습니다. 이 모든 다큐 멘 테이션 코멘트 외부 및 구성 요소는 플러그인 받는다는 주석에서 수입해야한다는

//Plexus component for the SecDispatcher 
@Component(role = SecDispatcher.class, hint = "mng-4384") 
private SecDispatcher secDispatcher; 

참고 :이에 주석을 변경 할 필요가 있었다.