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

Ivy解决了其他配置中的依赖问题

娄森
2023-03-14

我无法按配置名称检索预期的依赖项。我有一个共享库,我将使用以下 ivy 文件发布到本地存储库:

<?xml version="1.0"?>
<ivy-module version="2.0">
    <info organisation="my.org" module="my-stuff" status="release"/>
    <configurations>
        <conf name="runtime"/>
        <conf name="provided" extends="runtime"/>
        <conf name="test"     extends="provided"/>
    </configurations>
    <publications>
        <artifact name="my-stuff" type="jar"    ext="jar" conf="*"/>
        <artifact name="my-stuff" type="source" ext="zip" conf="*"/>
    </publications>
    <dependencies>
        <dependency org="javax.servlet"     name="servlet-api" rev="2.4"    conf="provided,test -> master"/>
        <dependency org="org.apache.tomcat" name="tomcat-dbcp" rev="7.0.47" conf="provided,test -> master"/>
        <dependency org="log4j"             name="log4j"       rev="1.2.17" conf="* -> master"/>
        <dependency org="my.org"            name="my-module"   rev="1.2.3"  conf="* -> default"/>
        <dependency org="junit"             name="junit"       rev="4.5"    conf="provided,test -> master"/>
        <dependency org="org.apache.ant"    name="ant"         rev="1.8.4"  conf="provided,test -> master"/>
    </dependencies>
</ivy-module>

到目前为止,一切都很好。我发布了我的东西jar,如果我尝试通过配置检索它的依赖项,我会得到我期望的结果,运行时配置中有两个依赖项,提供的和测试配置中各有六个依赖项。当我试图检索依赖于我的东西的依赖项时,问题就开始了。我使用这个常春藤文件:

<?xml version="1.0"?>
<ivy-module version="2.0">
    <info organisation="my.org" module="test-my-stuff" status="release"/>
    <configurations>
        <conf name="runtime"/>
        <conf name="provided" extends="runtime"/>
        <conf name="test" extends="provided"/>
    </configurations>
    <dependencies>
        <dependency org="my.org" name="my-stuff" rev="1.1"/>
    </dependencies>
</ivy-module>

现在,如果我尝试检索运行时配置,而不是获取my stuffjar、 0.05 my module,我会得到12个jar,包括 mail。jar,当我使用第一个ivy文件进行检索时,我无法获得的内容。为什么我的第二个常春藤文件会将所有内容拉入运行时配置?我到底做错了什么?

另一方面,如果我在第二个文件中添加一个配置映射到依赖项,例如runtime-


共有1个答案

都博裕
2023-03-14

我认为您的问题是如何声明已发布工件的配置:

<publications>
    <artifact name="my-stuff" type="jar"    ext="jar" conf="*"/>
    <artifact name="my-stuff" type="source" ext="zip" conf="*"/>
</publications>

您基本上是说它们应该是“运行时”、“提供”和“测试”配置的一部分。此外,由于这3种配置是嵌套的,“运行时”中的某些内容也将自动成为“提供的”和“测试”的一部分。

因此,我建议按如下方式重组您的常春藤文件:

<configurations>
    <conf name="default" extends="runtime,master"/>
    <conf name="master"/>
    <conf name="sources"/>
    <conf name="provided"/>
    <conf name="runtime"/>
    <conf name="test" extends="runtime"/>
</configurations>
<publications>
    <artifact name="my-stuff" type="jar"    ext="jar" conf="master"/>
    <artifact name="my-stuff" type="source" ext="zip" conf="sources"/>
</publications>

笔记:

  • 主要工件位于独立的“主”配置上,该配置也包含在“默认”配置中
  • “源”的其他配置。使其与运行时隔离,并允许显式下载
  • “提供”范围是独立的。这很重要,因为您不希望它被意外地打包到 war 文件中。

依赖声明现在应该可以工作了,但提供显式配置映射总是一个好主意,在这种情况下是我们新的“默认”配置:

<dependency org="my.org" name="my-stuff" rev="1.1" conf="runtime->default"/>
 类似资料:
  • 希望有人能阐明我一直在研究的问题。我正在将一个小项目从GWT更改为Vaadin,除了Oracle JDBC驱动程序(ojdbc6.jar)之外,我的所有库都在工作。在阅读了周围之后,我发现这个库无法通过公共Maven存储库获得,所以我开始努力从我的本地文件系统将其添加到Ivy中。 这就是问题所在。我已经能够让常春藤解析依赖关系并将其添加到常春藤缓存中,但是它只会将其添加到我的lib / jars文

  • 我已经在build.xml中构建了一个maven项目A,包括使用另一个pom导入所有测试依赖项。当我试图将maven项目A包含到gradle项目B中时,它给出了错误。 我尝试使用[--info]首先尝试正确的存储库URL并更新jar [缓存的资源是最新的]。但最终它会尝试其他人并抛出错误。 如何从gradle构建文件中传递配置文件名? 感谢您的帮助。 项目A- 项目B- 错误消息

  • Ivy可以解决依赖关系的依赖关系,留档说可以使用模块配置来告诉Ivy配置取决于依赖关系的给定配置。 我想在一个项目中使用htmlunit,在它的sourceforge页面依赖信息中我找到了依赖设置,我把maven规范翻译成ivy: 我写了一个测试,编译了它,当尝试运行它时,我有一个ClassNotFoundException,我再次返回sourceforge,查找关于htmlunit依赖关系的信息

  • 我对ivy没有解析我的一些依赖关系有问题。以下是我如何重现这个问题的: 我在eclipse中有一个空的java项目。我已经在我的项目中添加了ivy.xml: 这工作正常,ivy能够解决和下载口水。 如果我将修订版更改为6.3.0.Final(http://mvnrepository.com/artifact/org.drools/drools-core/6.3.0.Final),它将不起作用,我看

  • 我正在使用文件,告诉sbt 0.13.5从哪个存储库中检索。该文件仅包含和一个存储库,其自定义布局与标准sbt存储库非常相似,并表示和可选字段。 在解决项目的依赖关系时,我注意到了一些奇怪的行为: 解析精确的依赖关系很好 如您所见,请明确提及回购布局模式。 我很困惑,因为解析器可以很好地处理通配符依赖项以外的任何东西。我试着翻遍常春藤文档,想弄清楚某些解析器(比如我使用的解析器)是否没有实现某些类

  • 我遇到了一件奇怪的事。我用常春藤检索标签把罐子放在某处。如果我编写如下代码: 它工作正常。但是如果我添加如下内容: 它会抛出“无法解析依赖关系”。有什么建议吗?谢了。