从父POM中排除继承的构件?

3

我有一个继承自项目A的项目B。在项目A中,我需要将从Maven下载的jar文件复制到lib文件夹中。项目A的pom文件:

<groupId>com.penguin.com.projecta</groupId>
<artifactId>penguin-common--pom</artifactId>
<packaging>pom</packaging>
<version>${com.penguin.common.projecta}</version>
<name>Penguin COMMON POM</name>

<modules>
    <module>projectb</module>
</modules>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-jars</id>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <overWriteIfNewer>true</overWriteIfNewer>                
                        <artifactItems>
                            <artifactItem>
                                <groupId>ant-contrib</groupId>
                                <artifactId>ant-contrib</artifactId>
                                <version>1.1</version>
                                <type>jar</type>
                                <destFileName>ant-contrib.jar</destFileName>
                                <outputDirectory>lib</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>        
    </plugins>
</build>

当我构建项目时,Maven会将jar文件复制到lib文件夹中,并在B项目中创建lib文件夹,并将A项目pom文件中定义的jar文件复制到其中。现在我想在B项目中排除它。我尝试使用下面的脚本,但它无效。
<dependencies>
    <dependency>
        <groupId>com.penguin.com.projecta</groupId>
        <artifactId>penguin-common--pom</artifactId>
        <version>${com.penguin.common.projecta}</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>ant-contrib</groupId> 
                <artifactId>ant-contrib</artifactId>                        
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

我参考了这个链接:有没有办法排除从父POM继承的构件? ,但它并没有对我有用。

2个回答

3

尽管我对你的项目结构是否正确存在疑虑(我无法想到一个好的例子,父POM应该复制依赖项...),但你可能正在寻找 inherited 标签。


0

你的排除操作放错了位置。你需要在maven-dependency-plugin的配置中排除该构件,而不是在项目依赖中排除。这里的关键是属性combine.self="override"

来自Maven Pom Reference: “您可以通过向配置元素的子元素添加属性来控制子POM从父POM继承配置的方式。这些属性是combine.children和combine.self。在子POM中使用这些属性来控制Maven如何将父级插件配置与子级显式配置相结合。”

你需要更改子POM中的设置,类似于以下内容:

<build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-jars</id>
                <phase>process-sources</phase>
                <goals>
                    <goal>copy</goal>
                </goals>
                <configuration>
                    <overWriteIfNewer>true</overWriteIfNewer>                
                    <artifactItems combine.self="override">

                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>        
</plugins>

我不确定是否可以仅排除特定的构件,而不是覆盖整个artifactItems声明,这就是我在偶然发现你的问题时正在寻找的。为了解决这个问题,我的设置可能涉及到多个pom继承,因为我们在插件配置中列出了近100个构件,而我只想在子pom中排除和替换几个构件的不同实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接