Maven Password Encryption для других свойств

Я хотел бы использовать шифрование пароля Maven, такое как оно использует для узлов для свойств Mojo. Я попытался просто вставить зашифрованный пароль в правильное свойство для mojo, но он рассматривал его как обычный текст. я былhoping в аннотации для свойства Mojo я мог установить атрибут, объясняющий, что его можно зашифровать, и, если это так, использовать системный главный пароль для расшифровки, но я ничего не вижу в документации по этому вопросу.

Кому-нибудь удалось использовать шифрование паролей Maven для чего-либо, кроме узлов паролей сервера? Хотел бы сделать эту работу для моего Mojo.

Ответы на вопрос(4)

SqlExecMojo, Если вы используете плагин, вы можете получить пароль и расшифровать его. Если вы хотите использовать его для фильтрации свойств в плагине ресурсов, нам, вероятно, нужно написать собственную версию плагина ресурсов. У меня похожая проблема может в конечном итоге сделать это.

 09 июл. 2015 г., 15:34
@Vinayak обновил неработающую ссылку
 Colselaw06 янв. 2013 г., 03:35
Да, это действительно то же самое. Извините, я добрался до другого комментария первым.
 08 июл. 2015 г., 17:50
@Usman ismail: невозможно получить доступ к ссылке, запрашивается имя пользователя и пароль

Если вы используете Maven 2, вам нужно добавить следующую зависимость в ваш mojo:

<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в профиле, или вы даже можете передать зашифрованную строку в качестве системного свойства в командной строке.

Рекомендации:

http://jira.codehaus.org/browse/MNG-4384
 20 июн. 2014 г., 16:51
Я имею дело с этой проблемой и мог бы использовать некоторую помощь. Я получаю исключение нулевого указателя на моем secDispatcher. Вы говорите & quot; SecDispatcher как компонент с той же ролью подсказки. & Quot; Я определяю это в pom проекта, используя мой плагин? У вас все еще есть помпа от этого проекта? Благодарю.
Решение Вопроса

Maven-плагин SCM-, Maven-релиз-плагин, а такжеtomcat6-Maven-плагин все позволяют читать пароли от<servers> раздел${user.home}/.m2/settings.xml файл.

Возможно, если вы посмотрите на исходный код этих плагинов / целей, вы найдете ядро Maven или общий компонент, который позволяет вам делать то, что вы хотите, и вы можете адаптировать его для своих нужд.

 Colselaw05 янв. 2013 г., 01:36
Вот Это Да! Спасибо @ user944849! Потребовалось немного покопаться, но, начиная с maven-scm-plugin, добился цели. Источник этого не так уж и сложен - если вы используете Maven 2, вы включаете компонент Plexus, который выполняет расшифровку за вас.

я получил исключение нулевого указателя. Компонент SecDispatcher не был установлен. Мне нужно было изменить аннотацию на это:

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

Обратите внимание, что это за пределами любого комментария к документу, и компонент должен быть импортирован из плагина аннотаций maven.

Ваш ответ на вопрос