如何从插件中读取.m2 / settings.xml文件中的maven设置

时间:2013-02-04 07:01:28

标签: java maven maven-plugin

重要性递减的三个问题 - 链接将会这样做。

  1. 我需要在我的maven插件中读取某些maven设置,例如代理,服务器。我如何从我的插件中读取它们。我可以从.m2 / settings.xml文件中读取,但我认为必须有一种更简单的方法(已经有一些API)。

  2. 我从developers cookbook看到有一个类

    org.apache.maven.project.MavenProject
    我需要在我的插件中使用什么依赖项 - 我觉得这样会很好。< p>

  3. 是否可以在

    settings.xml
    中拥有自己的属性,例如

    <users>
    <user>
    <username>user_name1</username>
    <password>encrypted_password</password>
    </user>
    </users>

    怎么样?

  4. PS:我是初学者。

    更新1

    我能够在Injecting POM Properties via Settings.xml之后创建和阅读自定义属性。但是,我希望配置类似于cargo提供的配置。 E.g。

        <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>
    

    我如何实现这一目标。对于我的第三个问题有一种解决方法,不确定它是否正确。

    修改

    谢谢Jordan002!我知道我可以有多个配置文件,但我不知道使用它们。这样通过拥有配置文件我可以设置我的变量的值,或者更确切地说通过类似

    @Parameter(alias = "cargo.hostname")
    private String hostname;
    来注入我的插件中的值但是正如我所看到的,对于货物插件,所有它需要的定义如下

    <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 个答案:

答案 0 :(得分:2)

  1. 按照此处所述注入设置组件http://maven.apache.org/plugin-tools/maven-plugin-tools-annotations/

  2. 它在Maven核心org.apache.maven:maven-core:3.0.5

  3. 直接使用属性而不是嵌套。例如http://maven.apache.org/examples/injecting-properties-via-settings.html

答案 1 :(得分:1)

我对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

希望这有帮助。