【问题标题】:Ivy resolves jersey-servlet from Ant but not IvyDEIvy 解析来自 Ant 但不是 IvyDE 的 jersey-servlet
【发布时间】:2012-06-02 08:45:36
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

    标签: eclipse jersey ivy ivyde


    【解决方案1】:

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

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

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

    【讨论】:

    • 马克,谢谢。我尝试了您的设置文件并进行了一些尝试。看来我以前可能错了。从 ant 调用的 Ivy 实际上以同样的方式失败。当您说“以下内容对我有用”时,您是指我的 ivy.xml 吗?我认为我所依赖的某些配置文件可能存在问题。一般来说,我应该如何处理?再次感谢您的帮助。
    • 我从 Ivy 切换到 Maven,效果很好。 FWIW。不过,我宁愿弄清楚 Ivy 是怎么回事。
    • @user1420538 是的,我使用了您的 ivy 文件,它按预期下载了依赖项。如果您想进一步排除故障,请提供您正在使用的 ivy 版本以及 build.xml 中的 sn-p,详细说明您如何调用 ivy。
    • @user1420538 在我看来,ivy 是一种现代化或扩展 ANT 构建系统的方法。如果您想要放手并“为我做这一切”构建系统 Maven 是要走的路
    • 谢谢马克。我现在就添加它们。
    【解决方案2】:

    作为对您原始问题的更新:

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

    通过post,我设法编辑了 IvyDE 的设置(工作区首选项 -> Ivy -> 设置)并添加了一个包含此内容的 ivysettings.properties 文件:

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

    从现在开始一切正常。

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 2011-05-14
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2012-09-18
      相关资源
      最近更新 更多