gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:45:44 26 4
gpt4 key购买 nike

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

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

最初我创建了 2 个 Ivy 配置文件:

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

  • 然后我使用 GUI 来配置与 Ant 检索任务等效的 IDE。因此,在我不想在 IDE 中使用的 ANT 构建文件中,我有以下内容:
    <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。接下来我进入项目属性 > Ivy > 检索列表 > 添加 - 添加了 2 个不同的配置,一个用于编译,映射到/lib。另一个使用“运行时”配置并为检索模式指定“war/WEB-INF/lib/[artifact]-[revision].[ext]”。

    然而,我最终在我的 war/WEB-INF/lib/中得到了“编译”,这不是我想要的。我只希望将运行时依赖项复制到那里。

    最佳答案

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

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

    配置是 ivy 将依赖项组合在一起的机制。

    例子
    ├── 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

    构建.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>

    关于eclipse - 如何在eclipse中使用Ivy + IvyDE将不同的jar放到lib和web-inf/lib中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221550/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com