我想使用Maven的密码加密,例如它使用了魔的属性节点。 我尝试了粘贴加密的密码到正确的属性的魔力,但把它当作纯文本。 我希望有我可以在注释的魔属性会解释说,这可能是加密设置属性,如果是这样,使用系统主密码进行解密,但我没有看到任何文档中进行那。
有没有人成功地使用Maven的密码加密超过服务器的密码,节点等什么吗? 愿意做这项工作对我的魔。
我想使用Maven的密码加密,例如它使用了魔的属性节点。 我尝试了粘贴加密的密码到正确的属性的魔力,但把它当作纯文本。 我希望有我可以在注释的魔属性会解释说,这可能是加密设置属性,如果是这样,使用系统主密码进行解密,但我没有看到任何文档中进行那。
有没有人成功地使用Maven的密码加密超过服务器的密码,节点等什么吗? 愿意做这项工作对我的魔。
不是一个完整的答案,但希望在正确的方向指向...
的行家-SCM-插件 , 行家-释放插件 ,和tomcat6中-行家-插件所有允许从读取密码<servers>
的第${user.home}/.m2/settings.xml
文件。
或许,如果你看看那些插件/目标的源代码,你会发现一个Maven核心或共享组件,可以让你做你想做什么,你可以使其适应您的需求。
@ user944849让我在正确的方向开始,这里的解决方案。
如果你正在使用Maven 2,你需要以下依赖添加到您的魔力:
<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
:
<?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>
然后在你的Mojo,得到密码作为一个普通的财产,和SecDispatcher
为具有相同的组件roleHint
。 该decrypt
的方法String
,如果它不是一个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
,在资料,或者甚至可以通过一个加密的字符串作为对命令行系统属性。
参考文献:
看看这个代码样本SqlExecMojo 。 如果你是在一个插件,你可以得到密码和解密。 如果你想用它在资源插件过滤性能,我们可能会需要写的资源插件的定制版本。 我有一个类似的问题,最终可能这样做。
使用Colselaws解决方案,我得到一个空指针异常。 该SecDispatcher组件没有被设置。 我需要注解改成这样:
//Plexus component for the SecDispatcher
@Component(role = SecDispatcher.class, hint = "mng-4384")
private SecDispatcher secDispatcher;
请注意,这是任何文档注释之外,组件必须从Maven的注解插件进口。