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

如何减去常春藤依赖集

孙宏扬
2023-03-14

我的目标是将项目传递依赖关系划分为几个不交叉的集合:

    < li >系统(j2ee容器中已经存在jars手动列出明确的固定版本) < li >已提供(要复制到j2ee容器的jars手动列出) < li>ear(包装在ear/lib中的罐子,其余的)

下面列出的我当前的解决方案有一些缺点:

  • 必须逐个从earconf中排除系统和提供的库
  • 尚未明确排除的新的第三方传递deps可能会意外到达耳朵
  • 有时必须添加显式的覆盖重复的库名称和版本

有没有什么方法可以消除这些缺点?

如果能够以某种方式将一个conf定义为依赖集减去其他conf的结果(具有优雅的冲突解决方案),那就太好了:耳=运行时-系统-提供。

也许

寻找实际的解决方案。

甚至愿意考虑转投gradle,如果它有解决方案的话。

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">

    <info organisation="example.com" module="parent"/>

    <configurations defaultconfmapping="compile->@;runtime->@;system->master;provided->runtime;ear->runtime;test->test(default)">
        <conf name="compile"/>
        <conf name="runtime" extends="compile"/>
        <conf name="ear" extends="runtime" description="Libs to be packed inside ear"/>
        <conf name="provided" description="Libs to copy to j2ee container"/>
        <conf name="system" description="Libs already present in j2ee container"/>
        <conf name="test" extends="ear,provided,system" description="Simulate container environment. Used by unit tests to catch dependency compatibility problems."/>
    </configurations>

    <dependencies>
        <dependency org="log4j" name="log4j" rev="1.2.15" force="true" conf="system"/>
        <dependency org="commons-collections" name="commons-collections" rev="3.1" force="true" conf="system"/>
        <dependency org="commons-lang" name="commons-lang" rev="2.2" force="true" conf="system"/>

        <dependency org="org.apache.velocity" name="velocity" rev="1.7" force="true" conf="provided"/>
        <dependency org="org.slf4j" name="slf4j-api" rev="1.5.6" force="true" conf="provided"/>
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.5.6" force="true" conf="provided"/>
        <!-- ... -->

        <dependency name="module1" rev="latest.integration" conf="runtime,ear,provided,test"/>
        <dependency name="module2" rev="latest.integration" conf="runtime,ear,provided,test"/>
        <!-- ... -->

        <exclude org="commons-collections" conf="ear,provided"/>
        <exclude org="commons-lang" conf="ear,provided"/>
        <exclude org="org.apache.velocity" conf="ear"/>
        <!-- TODO: negation not working: https://issues.apache.org/jira/browse/IVY-982 -->
        <!--<exclude org="org.slf4j" conf="*, !provided"/>-->
        <exclude org="org.slf4j" conf="ear,test"/>
        <!-- ... -->

        <override org="org.slf4j" rev="1.5.6"/>
        <override org="commons-collections" module="commons-collections" rev="3.1"/>
        <override org="commons-lang" module="commons-lang" rev="2.2"/>
        <!-- ... -->
    </dependencies>

</ivy-module>

可以在IVY-1443附件中找到用于实验的示例项目源。


共有1个答案

柯正谊
2023-03-14

虽然Maven和Gradle可以排除提供的依赖项,但目前似乎没有办法用ivy轻松实现。

更新

在某些情况下,可以使用中间诱导模块和负正则表达式掩码来解决该任务:

    <dependency org="com.company" name="root.module" conf="ear" rev="latest.integration">
        <exclude org="^(?!com.company).*$" matcher="regexp"/>
    </dependency>

但我们已经搬到了Gradle,因为Ivy似乎正在失去动力。

 类似资料:
  • 问题内容: 我的目标是将项目传递依赖项划分为几个不交叉的集合: 系统(j2ee容器中已经存在的jar;以明确的固定版本手动列出) 提供(将jar复制到j2ee容器;手动列出) 耳朵(jar包装在耳朵/耳塞里,其余) 我下面列出的当前解决方案有一些缺点: 必须逐一从耳朵会议中排除系统和提供的库 尚未明确排除的新的第三方传递性部门可能会意外出现 有时必须添加显式复制的库名称和版本 有什么办法可以消除这

  • 我目前正在与apache ivy的conf设置作斗争。也许我会先解释我想实现的目标: 我需要两种配置:编译、运行时 这是我试过的: 但它甚至无法被解析:无法解析ivy文件'...\ivy.xml': 有人能告诉我如何正确地声明conf设置,这样我就可以使用compile或runtime来解析,并获得所有jar,包括可传递的依赖项(在这个示例中,只有ivy的jar)。 使现代化 好的,谢谢你的链接。

  • 我有一个项目,我正在覆盖到gradle。该项目有一些依赖项,如junit等。依赖项的Jars被下载,但这些Jars的依赖项没有下载。build.gradle文件如下 为什么测试:项目:17.20.快照不需要下载罐子?这个东西适用于蚂蚁常春藤项目 更新 1 我加了常春藤。测试项目的xml文件

  • 问题内容: 我在build.xml中创建了一个taskdef,它依赖于一个由Ivy导入的jar中驻留的类。 考虑到我的构建在启动之前就中断了,因为它找不到taskdef的类,所以我想了解是否有可能。 这似乎是一个鸡蛋和鸡肉的问题,因为我不能上课,因为我必须先解决我的依赖关系(这需要构建起作用)。 问题答案: 是的,有可能。但是,这意味着您必须在执行该任务之前解析和检索jar 。有两种方法可以做到这

  • 我无法使用Apache Ivy解决我的vaadin 7项目。每当我尝试时,它都会显示一个错误框,其中显示 “常春藤解决”遇到了一个问题。某些项目无法解决。 在单击错误框上的“详细信息”按钮时,我得到了以下附加信息 某些项目无法解决无法解决com.example#v7proj;的依赖项;working@User无法解析的依赖项:com.vaadin#vaadin客户端已编译;7.6.2:未找到未解析

  • 问题内容: 我在ivaven.xml中添加了一个依赖项(让我们将其命名为A),它在maven Central中具有一个pom文件。Ivy使用ibiblio解决了Maven依赖关系。添加到ivy.xml的依赖项(A)具有传递的依赖项(B)。到目前为止,到目前为止很好。常春藤无法解决传递性依赖项(B)的依赖项(C)。 我在ivy.xml中定义了A,如下所示: 在B的pom文件中,在编译和测试范围中都定

  • 我无法通过终端用Ant编译源代码,因为尽管我发出了“Ant resolve or Ant retrieve”,但依赖项似乎没有正确解析? 下面是我的build.xml和ivy.xml 编译文件 ivy.xml 当我运行“ant-compile”时,on-compiling ant抱怨它找不到作为tomcat一部分的“Servlet Context”。jar或“TObject”、“THashMap”

  • 使用日食(赫利俄斯)的常春藤2.2和常春藤DE 2.2。... 想从http://maven . spring framework . org/milestone/org/spring framework/data/spring-data-neo4j/2 . 1 . 0 . m1获取spring-data-neo4j及其默认依赖项 在我的常春藤文件中使用以下内容: 以及我的设置文件中的这些解析器: