如何在eclipse中使用Ivy + IvyDE将不同的jar放在lib和web-inf / lib中

时间:2013-08-14 00:52:59

标签: eclipse ant ivy ivyde

所以,我试图将Ivy添加到我的项目中,该项目输出一个WAR文件。一些依赖项,如RESTEasy和Jackson在运行时可以在JBoss中使用,所以我不想在war / WEB-INF / lib文件夹中使用它们。其他库不能通过JBoss模块获得,所以我想将它们包含在我的项目中。

**注意:在eclipse中,我使用动态Web模块方面。我们的想法是让IvyDE将所需的运行时依赖项复制到war / WEB-INF / lib。

最初我创建了2个常春藤配置文件:

  • ivy.xml - 运行时(不包含在WAR中)
  • ivy_web.xml - 包含在战争中

然后我使用GUI配置IDE等效的Ant检索任务。所以,在我的ANT构建文件中,我不想在我的IDE中使用它,我有以下内容:

<ivy:retrieve pattern="war/WEB-INF/lib/[artifact]-[revision].[ext]" file="ivy-web.xml" type="jar" />
<ivy:retrieve pattern="lib/[artifact]-[revision].[ext]" file="ivy.xml" type="jar" />
  • 图片尚不允许: - (

我注意到在另一篇帖子评论(mapping multiple ivy files in Eclipse)中他们提到只使用了1个ivy.xml - 但我不太确定如何到达那里?

哦,我也注意到了这一点:IvyDE + WTP: How to workaround that ivy library is ignored by WTP? - 但是我的项目并没有使用正确的方面,我宁愿不添加它们。

因此,在阅读此(https://stackoverflow.com/a/16575318/880884)帖子后,我将编译和运行时配置添加到我的项目中。它看起来像这样:

<configurations>
    <conf name="compile" description="used for building"/>
    <conf name="runtime" description="used for running"/>
</configurations>

 <dependencies>
    <!-- compile -->
    <dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.9.2" conf="compile->default"/>
    <dependency org="org.codehaus.jackson" name="jackson-xc" rev="1.9.2" conf="compile->default"/>
    <dependency org="org.codehaus.jackson" name="jackson-jaxrs" rev="1.9.2" conf="compile->default"/>


    <!-- runtime -->
    <dependency org="com.google.guava" name="guava" rev="14.0.1" conf="runtime->default"/>
    <dependency org="com.google.inject" name="guice" rev="3.0"  conf="runtime->default"/>
    <dependency org="aopalliance" name="aopalliance" rev="1.0" conf="runtime->default"/>
    <dependency org="javax.inject" name="javax.inject" rev="1" conf="runtime->default"/>
</dependencies>

同样,我试图只添加一个ivy.xml。接下来我去了项目属性&gt;常春藤&gt;检索列表&gt;添加 - 添加了2个不同的配置,一个用于编译,映射到/ lib。另一个使用&#39;运行时&#39;配置并指定&#34; war / WEB-INF / lib / [artifact] - [revision]。[ext]&#34;用于检索模式。

然而,我最终得到了&#34;编译&#34;在我的战争/ WEB-INF / lib /中,这不是我想要的。我只想在那里复制运行时依赖项。

2 个答案:

答案 0 :(得分:3)

我认为你缺少的是在检索任务中使用配置:

<ivy:retrieve pattern="lib/[artifact]-[revision].[ext]" conf="compile" />

配置是常春藤将依赖关系组合在一起的机制。

实施例

├── build.xml
├── ivy.xml
└── target
    ├── lib
    │   ├── jackson-core-asl-1.9.2.jar
    │   ├── jackson-jaxrs-1.9.2.jar
    │   ├── jackson-mapper-asl-1.9.2.jar
    │   └── jackson-xc-1.9.2.jar
    ├── reports
    │   ├── ivy-report.css
    │   ├── myorg-mymodule-compile.html
    │   └── myorg-mymodule-runtime.html
    └── war
        └── WEB-INF
            └── lib
                ├── aopalliance-1.0.jar
                ├── asm-3.1.jar
                ├── cglib-2.2.1-v20090111.jar
                ├── guava-14.0.1.jar
                ├── guice-3.0.jar
                └── javax.inject-1.jar

的build.xml

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

   <property name="build.dir" location="target"/>

    <target name="resolve" description="Use ivy to resolve dependencies">
        <ivy:resolve/>
        <ivy:report todir='${build.dir}/reports' graph='false' xml='false'/>
    </target>

    <target name="retrieve" depends="resolve" description="Populate directories">
      <ivy:retrieve pattern="${build.dir}/lib/[artifact]-[revision].[ext]" conf="compile" />
      <ivy:retrieve pattern="${build.dir}/war/WEB-INF/lib/[artifact]-[revision].[ext]" conf="runtime" />
    </target>

    <target name="clean" description="Cleanup build files">
        <delete dir="${build.dir}"/>
    </target>

    <target name="clean-all" depends="clean" description="Additionally purge ivy cache">
        <ivy:cleancache/>
    </target>

</project>

注意:

  • 上面的示例还会生成依赖项解析报告,我发现该报告对于查看每个配置的内容非常有用。

的ivy.xml

<ivy-module version="2.0">
  <info organisation="myorg" module="mymodule"/>

  <configurations>
    <conf name="compile" description="used for building"/>
    <conf name="runtime" description="used for running"/>
  </configurations>

  <dependencies>
    <!-- compile -->
    <dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.9.2" conf="compile->default"/>
    <dependency org="org.codehaus.jackson" name="jackson-xc" rev="1.9.2" conf="compile->default"/>
    <dependency org="org.codehaus.jackson" name="jackson-jaxrs" rev="1.9.2" conf="compile->default"/>

    <!-- runtime -->
    <dependency org="com.google.guava" name="guava" rev="14.0.1" conf="runtime->default"/>
    <dependency org="com.google.inject" name="guice" rev="3.0" conf="runtime->default"/>
    <dependency org="aopalliance" name="aopalliance" rev="1.0" conf="runtime->default"/>
    <dependency org="javax.inject" name="javax.inject" rev="1" conf="runtime->default"/>
  </dependencies>
</ivy-module>

答案 1 :(得分:0)

我今天偶然发现了这一点。鉴于IvyDE组件,我们在这里仍然缺少一些相关信息。为了让我的工作方式完全符合Eclipse IDE的要求,我在IvyDE中利用了一些不那么明显的功能。

1 - 对于项目中的常春藤库,编辑设置仅包括提供的&#39;属性。展开Java库树,然后右键单击&#34; Ivy&#34;,选择&#34;属性&#34;。

IvyDE Managed Libraries

2 - 对于WEB-INF / lib库,利用Project属性IvyDE部分下的检索功能。

enter image description here

选择适当的配置并将Pattern设置为WEB-INF / lib文件夹的位置。

enter image description here