传递maven插件依赖配置

时间:2018-03-21 14:45:21

标签: maven

如果我有两个maven插件,其中A取决于BB有配置参数,我应该如何定义B的配置?

我能想到三种解决方案,我所知道的解决方案不适用,而且我不确定哪种解决方案有效,或者还有其他可能性。不幸的是,即使是这个简单的案例,我也找不到任何例子。

尝试1 (不可能)

<configuration>放在依赖项下。这是不可能的,因为<dependency>代码不能包含<configuration>代码(see xsd)。

<plugin>
    <groupId>A</groupId>
    <artifactId>A</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>B</groupId>
            <artifactId>B</artifactId>
            <version>1.0.0</version>
            <configuration>
                <paramForB><param>bbb</param></paramForB>
            </configuration>
        </dependency>
    </dependencies>
</plugin>

尝试2

将配置参数放在A的配置下。

<plugin>
    <groupId>A</groupId>
    <artifactId>A</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>B</groupId>
            <artifactId>B</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <configuration>
        <paramForB><param>bbb</param></paramForB>
    </configuration>
</plugin>

尝试3

B作为单独的插件引入我需要的配置。

<plugin>
    <groupId>B</groupId>
    <artifactId>B</artifactId>
    <version>1.0.0</version>
    <configuration>
        <paramForB><param>bbb</param></paramForB>
    </configuration>
</plugin>
<plugin>
    <groupId>A</groupId>
    <artifactId>A</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>B</groupId>
            <artifactId>B</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</plugin>

其他问题(只是好奇)

  1. 此外,如果B取决于C,该怎么办?我该如何配置C
  2. 如果我有一个maven插件X,它也取决于B,但会将其与其他配置一起使用:我可以这样做吗?

2 个答案:

答案 0 :(得分:0)

在maven中,您有个人资料和属性。 首先从属性开始:

项目B

<properties>
   <customeParameter>parameterInB</customeParameter>
</properties>
<plugin>
    <groupId>A</groupId>
    <artifactId>A</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>B</groupId>
            <artifactId>B</artifactId>
            <version>1.0.0</version>
            <configuration>
                <paramForB>${customeParameter}</paramForB>
            </configuration>
        </dependency>
    </dependencies>
</plugin>

项目A

<properties>
   <customeParameter>overrideInA</customeParameter>
</properties>

请参阅我对问题的回答:How to get a command-line property to overwrite a maven property

如果项目B是项目A的父项,我的示例将起作用。如果不是,请在父pom中定义共享配置(它将是A和B的父项)并对其进行参数化。然后在孩子中你可以定义&#34;属性&#34;此配置的节值。

答案 1 :(得分:0)

答案基本上是尝试2 ,即将B的配置添加到插件使用A,但这取决于插件A的实现方式因为它有责任传递参数。