不下载任何依赖项的另一种选择是使用 transitive
属性将它们禁用。因此,如果您想要 hibernate-core
,但不想要它的任何依赖项,可以这样做:
<dependencies>
<dependency org="org.hibernate" name="hibernate-core"
rev="3.3.1.GA" conf='..'
transitive="false" />
</dependencies>
如何使Ivy下载Hibernate而不是这两个库?
Ivy使用所谓的“配置”来实现此目的。您代表Hibernate的ivy.xml
需要提供不同的配置来表示Hibernate的不同用例。(显然,有些Hibernate用例确实需要jaas和jacc,但显然您没有使用该用例。)
这里是有关配置的文档。如果您想提供正在使用的ivy.xml
来获取Hibernate,我可以提供指针,以构建将删除要删除的特定库的配置。
如果我真正需要它们并从Sun下载了它们的Jars,那么在我的计算机上哪个文件夹中Ivy会查找它们?
Ivy用于查找ivy文件和工件的“目录”由您使用的解析器列表指定。解析器列表在ivy设置文件中指定(通常命名为ivysettings.xml
)。通常,这些不是本地目录,而是远程URL。然而,有一种本地文件解析器类型适用于此。
如果您这样做,您将需要提供具有与解析器模式匹配的文件名的ivy文件和工件(jars)。详细信息请参见文档。
以下是一个包含本地文件解析器示例的ivy设置文件:
<filesystem name="myfiles" checkconsistency="false" checksums="" transactional="false">
<ivy pattern="/data/repo/[organisation]/[module]-[revision].ivy.xml"/>
<artifact pattern="/data/repo/[organisation]/[module]-[revision].[ext]"/>
</filesystem>
请注意,您需要将您的 ivy 任务指向正确的解析器。 您可以在 ant 任务上使用 resolver 属性或在 ivy 设置文件中的 settings 元素上使用 defaultResolver 属性来实现此目的。
这里是有关解析器的文档。
编辑: OP 找到了一个更少时间密集型的解决方案来解决他最初的问题。 依赖项标记的“排除”子标记对他起作用:
<dependencies>
<dependency org="org.hibernate" name="hibernate-core" rev="3.3.1.GA" conf='..'>
<exclude name='jaas' />
<exclude name='jacc' />
</dependency>
</dependencies>
<ivysettings>
<settings defaultResolver="chained" checkUpToDate="true" />
<resolvers>
<chain name="chained">
<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>
<ibiblio name="ibiblio" m2compatible="true"/>
<ibiblio name="jboss" root="http://repository.jboss.org/maven2/" m2compatible="true"/>
<ibiblio name="java-net-maven1" root="http://download.java.net/maven/1" pattern="${java.net.maven.pattern}" m2compatible="false"/>
<ibiblio name="java-net-maven2" root="http://download.java.net/maven/2/" m2compatible="true"/>
<ibiblio name="compass" m2compatible="true" root="http://repo.compass-project.org" />
</chain>
</resolvers>
jboss ibibilio解析器是用来获取JAAS / JAAC的诀窍
然后我的ivy.xml可以使用它进行拉取
<ivy-module version="2.0">
<info organisation="foo" module="Bar"/>
<dependencies>
<dependency org="com.h2database" name="h2" rev="1.2+"/>
<dependency org="org.hibernate" name="hibernate-annotations" rev="3.4.0.GA"/>
</dependencies>