当前位置: 首页 > 知识库问答 >
问题:

排除从父POM继承的工件?

厍彭薄
2023-03-14

我让项目B从项目A继承。在项目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个答案

裴泰平
2023-03-14

您的排除项列在错误的位置。您希望从 maven 依赖项插件的配置中排除工件,而不是从项目依赖项中排除。这里的神奇成分是属性组合.self=“覆盖”

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

您需要将子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>

我不确定是否有可能仅仅排除一个特定的工件,而不是凌驾于整个工件声明之上,这就是我偶然发现您的问题时所寻找的。为了解决这个问题,我的设置可能涉及多pom继承,因为我们在插件配置中列出了近100个工件,我只想在不同的实现中排除和交换我的子pom中的一些工件。

左丘元徽
2023-03-14

虽然我怀疑你的项目结构是否正确(我想不出一个很好的例子,其中父pom应该复制依赖项...),但你可能正在寻找继承的标签

 类似资料:
  • 在我的父pom xml文件中,我声明了一些在大多数孩子的pom中使用的依赖项。 然而,在一个子pom中,我不使用这些依赖项,我想找到一种方法来排除它们(为了不被视为未使用的依赖项)。 现在,在子pom的依赖部分,我什么都没有!有什么想法吗?

  • 问题内容: 可以通过在内部声明一个元素来排除依赖项中的工件,但是在这种情况下,需要排除从父项目继承的工件。讨论中的POM的摘录如下: 工件,取决于 ,并且取决于同一库的另一个版本。由于执行环境上存在from 的事实,尽管未导出,但与父级上存在的from发生冲突,其范围为。 一种解决方案是从父POM摆脱mail.jar,但是大多数继承base的项目都需要它(log4j的传递依赖项)。因此,我想做的就

  • 我试图理解从根pom文件到中级pom文件的继承指令。说明书上写着: 定义父pom文件继承和groupid、artifactid(但不是版本),从中间级父级到根pom文件。

  • 我有一个maven工件(),它依赖于某个工件()。 有一个父pom,其中包含某些其他依赖项。 是否可以使用这些依赖项,而无需在其自身pom的依赖项部分中明确添加它们?

  • null 但是当我在一个项目中看到有效的POM时,我发现它还继承了、(这是一个问题,这应该是包含它的POM的描述,而不是它的子级。所有子级都有一个类似“所有POM的根”的描述有什么意义) 那么,是否存在一个实际的列表,或者它只是从父POM继承所有内容?我在工件的清单中使用了其中的一些属性,因此我想添加有意义的值

  • 我是使用maven和jenkins的新手。我正在尝试从父pom继承到子pom的依赖关系,它显示以下错误: 这是我的父母POM: 这是我的孩子波姆: 这是我如何尝试从父POM继承子POM中的依赖关系: 如果我在子POM中放置这些相同的依赖项,它会完美地工作。我使用jenkins在nexus中进行安装和部署。我使用的是maven-3.3.9。在jenkins中,我阅读了git中两个不同maven项目中