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

2022-09-03 15:57:37

按重要性递减顺序排列的三个问题 - 链接就可以了。

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

  2. 我从开发人员的食谱中看到有一个类

    org.apache.maven.project.MavenProject
    我需要什么依赖性才能在我的插件中提供 - 我觉得这将是很好的。
  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>

我如何实现这一目标。为我的第3个问题提供一种解决方法,不确定它是否是正确的方法。

编辑

谢谢乔丹002!我知道我可以有多个配置文件,但我不知道使用它们。这样,通过配置文件,我可以设置变量的值,或者通过说类似的话来注入插件中的值。

@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定义的配置,无需为此编写配置文件。


答案 1
  1. 按此处所述注入 setttings 组件,http://maven.apache.org/plugin-tools/maven-plugin-tools-annotations/

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

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


答案 2

我不太熟悉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

希望这有帮助。


推荐