gpt4 book ai didi

java - Ivy 似乎只获取 javadoc jar

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:11 24 4
gpt4 key购买 nike

我在我的项目中使用 Ivy 和 Ivy Eclipse 插件。

似乎下载并添加到我的项目中的某些 jar 是 javadoc jar,而不是带有实际代码的 jar。注意 - 并非所有 jar 都会发生这种情况。

例如,将此添加到我的 ivy.xml 文件中:

<dependency org="junit" name="junit" rev="4.8.2"/>

导致下载 junit 的 javadoc 并将其添加到我的类路径中: enter image description here

这会中断我的项目的编译,因为所有单元测试都不起作用。

在我添加对 Spring 的引用之前一切正常,但一切都崩溃了。我已经尝试删除引用,并从我的本地缓存中删除 junit 以强制 ivy 再次获取它,但问题仍然存在。

这是我的全部依赖 block (删除了 Spring ):

<dependencies>
<dependency org="org.hamcrest" name="hamcrest-library" rev="1.3.RC2"/>
<dependency org="junit" name="junit" rev="4.8.2"/>
<dependency org="org.mockito" name="mockito-core" rev="1.8.5"/>
<dependency org="javax.persistence" name="persistence-api" rev="1.0"/>
</dependencies>

这是我的项目的 ivysettings.xml:

<ivysettings>

<caches artifactPattern="[organisation]/[module]/[revision]/[artifact].[ext]" />
<settings defaultResolver="local.ibiblio.jboss.java-net.springsource" checkUpToDate="true" />

<resolvers>
<chain name="local.ibiblio.jboss.java-net.springsource">
<filesystem name="libraries">
<artifact pattern="${basedir}/ivy-repo/[artifact]-[revision].[type]" />
</filesystem>
<ibiblio name="ibiblio" m2compatible="true" />
<ibiblio name="jboss" m2compatible="true"
root="https://repository.jboss.org/nexus/content/groups/public-jboss" />
<ibiblio name="java.net" m2compatible="true"
root="https://repository.jboss.org/nexus/content/repositories/java.net-m2/" />
<ibiblio name="java.net" m2compatible="true"
root="http://repository.codehaus.org/" />
<url name="com.springsource.repository.libraries.release">
<ivy pattern="http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>

<url name="com.springsource.repository.libraries.external">
<ivy pattern="http://repository.springsource.com/ivy/libraries/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/libraries/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
<url name="com.springsource.repository.bundles.release">
<ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>

<url name="com.springsource.repository.bundles.external">
<ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
<artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
</url>
</chain>

</resolvers>
</ivysettings>

最佳答案

一些开源模块包括可选的 java doc jar。要删除它们,请将配置映射添加到您的每个依赖项:

   <dependency org="junit" name="junit" rev="4.8.2" conf="default"/>

ivy 中的default 配置等同于maven 模块中的compile 作用域。这就是可以自动省略可选库的方式。 (检查他们的 POM)。

更好的方法是声明您自己的配置和默认映射,如下所示:

<configurations defaultconfmapping="compile->default">
<conf name="compile" description="Required to compile code"/>
<conf name="test" description="Additional test dependencies" extends="compile" />
</configurations>

然后在你的ivy文件中你只需要声明非标准配置:

<dependencies>
<dependency org="org.hamcrest" name="hamcrest-library" rev="1.3.RC2" conf="test->default"/>
<dependency org="junit" name="junit" rev="4.8.2" conf="test->default"/>
<dependency org="org.mockito" name="mockito-core" rev="1.8.5" conf="test->default"/>
<dependency org="javax.persistence" name="persistence-api" rev="1.0"/>
</dependencies>

在这种情况下,我们只希望 3 个测试库出现在测试 配置中。

还在迷茫? ivy 配置的神奇之处在于,当您使用它们来管理构建的类路径时

  <target name='dependencies' description='Resolve project dependencies and set classpaths'>
<ivy:resolve/>

<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="test.path" conf="test"/>
</target>

这就是当您在依赖项上声明 scope 标记时 Maven 正在做的事情,例如:

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>

Maven 中的作用域是固定的。在 Ivy 中,你可以拥有你需要的数量。

关于java - Ivy 似乎只获取 javadoc jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com