0

我正在尝试使用 Apache Jersey 构建一个安静的服务器。我在 Eclipse Indigo 中开发,并使用 Ivy 进行依赖管理与这个 ivy.xml 文件

<?xml version="1.0" encoding="UTF-8"?>

<!--=========================================================================-->
<!--
-->
<!--=========================================================================-->

<ivy-module version="2.2">      
    <info organisation="com.mypackage" module="mymodule"/>
    <dependencies>
        <dependency org="com.sun.jersey" name="jersey-servlet" rev="1.12"/>
    </dependencies>
</ivy-module>

这解决了从 ant 调用 ivy 的问题,但是从 IvyDE 我得到了这个错误

Some projects fail to be resolved
Impossible to resolve dependencies of com.mypackage#mymodule;working@Samsung-Windows
unresolved dependency: org.jboss.weld#weld-spi;1.1.4.Final: not found
unresolved dependency: javax.annotation#jsr250-api;${jsr250.api.version}: not found
unresolved dependency: org.jboss.weld#weld-api;1.1.4.Final: not found
unresolved dependency: javax.inject#javax.inject;${atinject.api.version}: not found
unresolved dependency: org.jboss.spec.javax.interceptor#jboss-interceptors-api_1.1_spec;${interceptor.api.version}: not found

对我来说, ${atinject.api.version} 看起来好像在某处无法正确解析变量。

我对Ivy的了解很肤浅,没有什么好的想法。

IvyDE 和 ant 都使用相同的 ivysettings.xml 文件(至少,我相信它们是)。

<?xml version="1.0" encoding="UTF-8"?>

<!--=========================================================================-->

<!--=========================================================================-->

<ivysettings>
   <settings defaultResolver="ibiblio"/>
   <resolvers>
          <ibiblio name="ibiblio" m2compatible="true"/>
          <ibiblio name="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"/>
    </resolvers>
</ivysettings>

任何方向都会很棒。

提前非常感谢。

编辑:添加部分 Build.xml

我正在使用 apache-ivy-2.2.0 虽然输出声称:

[ivy:configure] :: Apache Ivy 2.3.0-rc1 - 20120416000235 :: http://ant.apache.org/ivy/ ::

这是 build.xml:

<?xml version="1.0"?>

<project name="IvyTest" default="ivy.retrieve" xmlns:ivy="antlib:org.apache.ivy.ant">
    <description>
        IvyTest
    </description>

    <!--=====================================================================-->
    <!-- Properties                                                          -->
    <!--=====================================================================-->

    <!-- General properties. -->
    <property name="bin" location="bin" />
    <property name="lib" location="lib" />
    <property name="lib.ivy" location="${lib}/ivy-managed" />

    <property name="ivy.version" value="2.2.0" />
    <property name="ivy.home" location="${bin}/apache-ivy-${ivy.version}" />
    <available property="ivy.installed" file="${ivy.home}/ivy-${ivy.version}.jar" />

    <property name="ant.build.javac.source" value="1.7" />
    <property name="ant.build.javac.target" value="1.7" />

    <!--=====================================================================-->
    <!-- Targets: Ivy                                                        -->
    <!--=====================================================================-->

    <!--============================ ivy.download ===========================-->
    <target name="ivy.download" unless="ivy.installed">
        <mkdir dir="${ivy.home}"/>
        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar" dest="${ivy.home}/ivy-${ivy.version}.jar" usetimestamp="true"/>
    </target>

    <!--============================ ivy.init ===============================-->
    <target name="ivy.init" depends="ivy.download">
        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpath="${ivy.home}/ivy-${ivy.version}.jar"/>
    </target> 

    <!--============================ ivy.resolve ============================-->
    <target name="ivy.resolve" description="Resolve dependencies with Ivy" depends="ivy.configure">
        <ivy:resolve />
    </target>

    <!--============================ ivy.retrieve ===========================-->
    <target name="ivy.retrieve" description="Retrieve dependencies with Ivy" depends="ivy.configure">
        <ivy:retrieve log="verbose" pattern="${lib.ivy}/[artifact]-[revision].[ext]" type="jar,bundle" sync="true"/>
    </target>

    <!--============================ ivy.configure ==========================-->
    <target name="ivy.configure" description="Configure Ivy settings file" depends="ivy.init">
        <ivy:configure file="ivysettings.xml"/>
    </target>

    <!--============================ ivy.clean ==============================-->
    <target name="ivy.clean" description="Cleans the Ivy cache" depends="ivy.init">
        <ivy:cleancache />
    </target>

</project>
4

2 回答 2

1

默认情况下,ivy 将从 Maven Central 下载依赖项,因此除非您使用自己的 Maven 存储库管理器,否则您不需要 ivy 设置文件。话虽如此,声明一个和以下对我来说很好的做法是好的做法:

<ivysettings>
    <settings defaultResolver="central"/>
    <resolvers>
        <ibiblio name="central" m2compatible="true"/>
    </resolvers>
</ivysettings>

请注意,它比您的示例简单得多。旧的 java.net 存储库不再真正使用,它们的大部分(如果不是全部)内容已迁移到 Maven Central。

于 2012-05-28T18:16:14.513 回答
0

作为对原始问题的更新:

我也遇到了可以在控制台上解决的情况,ant resolve但 IvyDe(在 Eclipse 4.2 下)给了我错误“无法解决依赖项 [...]”

通过这篇文章,我设法编辑了 IvyDE 的设置(Workspace Preferences -> Ivy -> Settings)并添加了一个包含以下内容的 ivysettings.properties 文件:

ivy.home=${user.home}/.ant
ivy.jar.dir=${ivy.home}/lib
ivy.jar.file=${ivy.jar.dir}/ivy.jar

从现在开始一切正常。

于 2013-06-29T22:32:20.800 回答