Как читать настройки maven.м2/настройки.XML-файл из плагина

три вопроса в порядке убывания важности - ссылки сделаю.

  1. мне нужно прочитать некоторые настройки maven, такие как прокси-серверы в моем плагине maven. Как я могу прочитать их из моего плагина. Я могу читать .м2/настройки.xml-файл, но я думаю, что должен быть более простой способ (некоторый API, который уже делает это).

  2. Я вижу разработчики cookbook есть класс

    org.apache.maven.project.MavenProject
    какая зависимость I нужно, чтобы это было доступно в моем плагине - я чувствую, что это будет хорошо.
  3. возможно ли иметь свои собственные свойства в

    settings.xml
    допустим
    <users>
    <user>
    <username>user_name1</username>
    <password>encrypted_password</password>
    </user>
    </users>

    как ?

PS: Я новичок.

обновление 1

я смог создать и прочитать пользовательские свойства после инъекция свойств POM через настройки.в XML. Однако я хотел бы иметь конфигурацию, подобную тому, что груз обеспечивает. Е. Г.

    <servers>
        <server>
            <id>tomcat7_local</id>
            <configuration>
                <cargo.hostname>localhost</cargo.hostname>
                <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
                <cargo.remote.username>my_username</cargo.remote.username>
                <cargo.remote.password>my_password</cargo.remote.password>
                <cargo.servlet.port>8080</cargo.servlet.port>
            </configuration>
        </server>
        <server>
            <id>tomcat6_local</id>
            <configuration>
                <cargo.hostname>localhost</cargo.hostname>
                <cargo.remote.uri>http://localhost:8080/manager</cargo.remote.uri>
                <cargo.remote.username>my_username</cargo.remote.username>
                <cargo.remote.password>my_password</cargo.remote.password>
                <cargo.servlet.port>8080</cargo.servlet.port>
            </configuration>
        </server>
    </servers>

как мне этого достичь. Есть своего рода обходной путь для моей проблемы 3rd не уверен, что это правильный путь.

редактировать

спасибо Jordan002! Я знаю, что у меня может быть несколько профилей, но я не знал, как их использовать. Таким образом, имея профили, я могу установить значение моей переменной или, скорее, ввести значение в мой плагин, сказав что-то вроде

@Parameter(alias = "cargo.hostname")
private String hostname;
но, как я вижу, для плагина cargo все это требуется определяется как ниже
<servers>
  <server>
     <id>someId</id>
     <configuration>
     <!-- Configurations are placed here -->
     </configuration>
</servers>

аналогично, или может быть не так похожи, как нет конфигурация здесь

<proxies>
  <proxy>
    <active>true</active>
    <protocol>http</protocol>
    <host>My_proxy_host</host>
    <port>My_proxy_port</port>
  </proxy>
</proxies>

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

далее, я хотел бы сделать что-то вроде груза. Это позволяет мне написать всю конфигурацию внутри сервера и в POM проекта мне нужно только сделать следующее

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <configuration>
        <container>
            <containerId>tomcat7x</containerId>
            <type>remote</type>
        </container>
        <configuration>
            <type>runtime</type>
            <properties>
                <cargo.server.settings>tomcat7_local</cargo.server.settings>
            </properties>
        </configuration>
        <deployer>
            <type>remote</type>
        </deployer>
        <deployables>
            <deployable>
                <groupId>${project.groupId}</groupId>
                <artifactId>${project.artifactId}</artifactId>
                <type>war</type>
                <properties>
                    <context>${project.artifactId}</context>
                </properties>
            </deployable>
        </deployables>
    </configuration>
</plugin>

и груз подбирает конфигурации(ы), которые я определил для tomcat7_local не нужно писать профиль для этого.

2 ответов


  1. введите компонент setttings, как описано здесь http://maven.apache.org/plugin-tools/maven-plugin-tools-annotations/

  2. его в Maven core org.апаш.maven: Maven-core: 3.0.5

  3. используйте свойства напрямую, а не вложенные. например http://maven.apache.org/examples/injecting-properties-via-settings.html


Я не слишком хорошо знаком с плагином Cargo, но из документации он кажется настраиваемым, как и любой другой плагин Maven. То, что я бы изменил от вашего "обновления 1", было бы сделать профили tomcat6 и tomcat7:

<profiles>
    <profile>
        <id>tomcat6_local</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <cargo.hostname>localhost</cargo.hostname>
            <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
            <cargo.remote.username>my_username</cargo.remote.username>
            <cargo.remote.password>my_password</cargo.remote.password>
            <cargo.servlet.port>8080</cargo.servlet.port>
        </properties>
    </profile>
    <profile>
        <id>tomcat7_local</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <cargo.hostname>localhost</cargo.hostname>
            <cargo.remote.uri>http://localhost:8080/manager</cargo.remote.uri>
            <cargo.remote.username>my_username</cargo.remote.username>
            <cargo.remote.password>my_password</cargo.remote.password>
            <cargo.servlet.port>8080</cargo.servlet.port>
        </properties>
    </profile>
</profiles>

и укажите во время выполнения, какой tomcat вы хотели бы запустить / остановить, пройдя в соответствующем профиле:

mvn install -P tomcat6_local

надеюсь, что это помогает.