21

我正在使用Ivy来管理我的项目的依赖关系。

到目前为止,我已经指定了对 Hibernate 和 servlet-api 的依赖。但是,hibernate jar 本身有很多并不是真正需要的依赖项,例如jaasjacc

这成为一个阻碍,因为 jaas 和 jaac 是 Sun 库,因此它们的许可证禁止将它们放在 Maven 存储库中,因此 Ivy 无法在那里找到它们。

  • 如何让 Ivy 下载 Hibernate 而不是这两个?
  • 作为奖励,如果我真的需要这些并从 Sun 下载了他们的 Jars,Ivy 会在我机器的哪个文件夹中查找它们?
4

4 回答 4

25

不下载任何依赖项的另一个选项是使用transitive属性禁用它们。因此,如果您想要hibernate-core,但没有它的依赖项,您可以这样做:

<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core"
               rev="3.3.1.GA" conf='..'
               transitive="false" /> 
</dependencies>
于 2009-04-18T04:04:59.413 回答
19

如何让 Ivy 下载 Hibernate 而不是这两个?

常春藤使用它所谓的“配置”来做到这一点。代表 Hibernate的您ivy.xml将需要提供不同的配置来代表不同的 hibernate 用例。(显然有一些需要 jaas 和 jacc 的 hibernate 使用,但显然你没有使用这种情况。)

是有关配置的文档。如果您想提供ivy.xml用于休眠的,我可以提供有关构建配置的指针,这些配置将删除您要删除的特定库。

如果我真的需要这些并从 Sun 下载了他们的 Jars,Ivy 会在我机器的哪个文件夹中查找它们?

ivy 查找 ivy 文件和工件的“目录”由您正在使用的解析器列表指定。解析器列表在 ivy 设置文件(通常命名为ivysettings.xml.)中指定。通常,这些不是本地目录,而是远程 URL。有; 但是,一种适用于此的本地文件解析器类型。

如果这样做,您将需要提供 ivy 文件和工件(jar),每个文件的文件名都与解析器模式匹配。有关详细信息,请参阅文档。

下面是一个来自 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 设置文件defaultResolver中元素的属性来执行此操作。settings

是有关解析器的文档。

编辑: OP 为他的特定原始问题找到了一种耗时较少的解决方法。依赖标签的“排除”子标签为他完成了这项工作:

<dependencies>  
   <dependency org="org.hibernate" name="hibernate-core" rev="3.3.1.GA" conf='..'> 
       <exclude name='jaas' /> 
       <exclude name='jacc' />
   </dependency>
</dependencies>
于 2009-01-30T21:04:05.833 回答
0

浏览网页和博客,我发现以下常春藤设置可用于抓取 jaas/jacc 和休眠

<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>

于 2009-11-29T02:42:01.613 回答
0

从字面上回答你的第二个子问题,到目前为止没有人做过,“Ivy 会在我机器的哪个文件夹中查找 JAR?” 那要看。假设您没有更改 ivysettings.xml 或其他配置文件中的位置:对于 JAAS,这将是:( user home )/.ivy2/cache/javax.security/jaas/jars。如果 Ivy 已经尝试在 Maven Central 或其他 repo 中查找 JAAS 失败,则该目录树大部分应该已经存在,您需要做的就是创建“jars”目录并将jaas-1.0.01.jar放入它。Ivy 将不再抱怨在下一次调用中缺少依赖项。

编辑:再一次,请参阅下面的讨论以了解不这样做的注意事项。

((用户主页)在 Windows 7 上是 C:/Users/(用户名))。

于 2012-02-08T17:00:54.953 回答