我正在使用Ivy来管理项目的依赖项。
到目前为止,我已经指定了对Hibernate和servlet-api的依赖。但是,hibernate jar本身有许多不需要的依赖项,例如jaas和jacc。
由于jaas和jaac是Sun的图书馆,因此它成为了一个显示阻止者,因此他们的许可证禁止将它们放置在Maven回购中,因此常春藤在那里找不到它们。
答案 0 :(得分:25)
不下载任何依赖项的另一个选项是使用transitive
属性禁用它们。因此,如果你想要hibernate-core
,但没有它的依赖关系,你可以这样做:
<dependencies>
<dependency org="org.hibernate" name="hibernate-core"
rev="3.3.1.GA" conf='..'
transitive="false" />
</dependencies>
答案 1 :(得分:19)
如何让常春藤下载Hibernate而不是这两个?
Ivy使用它所谓的“配置”来做到这一点。代表Hibernate的ivy.xml
需要提供不同的配置来表示hibernate的不同用例。 (显然有一些使用hibernate确实需要jaas和jacc,但显然你没有使用那种情况。)
Here是有关配置的文档。如果你想提供你用于休眠的ivy.xml
,我可以提供关于构建配置的指针,这些配置将删除你想要删除的特定库。
如果我真的需要这些并从Sun下载他们的Jars,我的机器中的哪个文件夹会常春藤寻找它们?
ivy查找常春藤文件和工件的“目录”由您正在使用的解析器列表指定。解析器列表在常春藤设置文件中指定(通常命名为ivysettings.xml
。)通常,这些不是本地目录,而是远程URL。有;但是,本地文件解析器类型将适用于此。
如果这样做,您将需要提供常春藤文件和工件(jar),每个文件都具有与解析器模式匹配的文件名。有关详细信息,请参阅文档。
以下是常春藤设置文件中的示例本地文件解析程序:
<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>
另请注意,您需要将常春藤任务指向正确的解析器。您可以使用ant任务的解析程序属性或常春藤设置文件中defaultResolver
元素的settings
属性执行此操作。
Here是解析器的文档。
编辑: OP针对他的具体原始问题找到了一个耗时较少的强化解决方法。依赖标记的“exclude”子标记为他完成了这项工作:
<dependencies>
<dependency org="org.hibernate" name="hibernate-core" rev="3.3.1.GA" conf='..'>
<exclude name='jaas' />
<exclude name='jacc' />
</dependency>
</dependencies>
答案 2 :(得分:0)
浏览网页和博客时,我发现以下常春藤设置可用于抓取jaas / jacc和hibernate
<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>
答案 3 :(得分:0)
要回答你的第二个子问题字面意思,到目前为止还没有人做过,“我的机器中的哪个文件夹会常春藤寻找JAR?”那要看。假设您没有更改ivysettings.xml或其他配置文件中的位置:对于JAAS, 这将是:(用户主页)/。ivy2 / cache / javax.security / jaas / jars。如果Ivy已经尝试在Maven Central或其他存储库中找不到JAAS,那么该目录树应该已经存在大部分,您需要做的就是创建“jars”目录并在其中放置jaas-1.0.01.jar。 Ivy将不再抱怨下次调用时缺少依赖项。
编辑:然后,请参阅下面的讨论,看看不这样做的注意事项。
((用户主页)是Windows 7上的C:/ Users /(用户名)。