确定Eclipse中的Java项目依赖项

时间:2011-08-23 23:01:16

标签: java eclipse maven dependencies project

这是一个令人难以置信的愚蠢问题,我知道......但是我正在使用Ant构建的Java项目转换为Apache Maven。我为实现这一目标而阅读的其中一个步骤是将pom.xml文件中所需的所有JAR项目作为依赖项。现在,既然我对这个项目并不太熟悉,那么我是否可以通过任何属性设置来清楚地查看所有JAR依赖项?我知道有些是在WEB-INF \ lib目录中,但是查看Ant的原始build.xml文件,似乎不仅仅是它试图添加的文件。同样,我对所有这些概念都很陌生,但我只是希望有一种简单的方法来确定Java Project具有哪些依赖关系,以便我可以将它们 - 或者它们的Maven等价物 - 添加到pom.xml中文件。有什么建议吗?

编辑:这是令我困惑的一部分。当我打开我试图用Apache Tomcat部署的项目的WAR文件时,这些是我能找到的唯一JAR文件......

images
META-INF
util
WEB-INF
    > classes
    > lib
        > jtds-1.2.4.jar
        > jw-core-web-1.2.0.jar
    > web.xml
blah.jsp
blah.jsp
blah.jsp

我认为我至少需要这两个文件。但是当我打开build.xml文件时,我找到了一个这样的部分:

<!-- Jars listed here are added to the generated war file -->
<fileset id="bundle.jars" dir="WebRoot/WEB-INF/lib">
    <include name="base.jar"/>
    <include name="ldap.jar"/>
    <include name="junit.jar"/>
    <include name="titan.jar"/>
    <include name="activation.jar"/>
    <include name="javamail-1.2.jar"/>
    <include name="commons-httpclient.jar"/>
</fileset>

当然,我没有看到上面简要扩展的WAR文件中的任何这些罐子。此外,JRE系统库列在我的Package Explorer下以及JAR文件列表中。现在,我是否还需要将这些添加到我的依赖列表中?这就是我所拥有的:

JRE System Library
    > resources.jar
    > rt.jar
    > jsse.jar
    > jce.jar
    > charsets.jar
    > dnsns.jar
    > dns_sd.jar
    > localedata.jar
    > sunjce_provider.jar

3 个答案:

答案 0 :(得分:1)

如果您在Eclipse中设置了项目,那么您应该能够在Project Explorer视图中查看所有依赖项。它们必须位于构建路径上才能正确编译。

在Ant方面,我认为运行时的必要jar将被复制到其余构建的某个地方。如果您的项目正在构建到WAR中,则尤其如此。

如果没有复制任何内容,那么最好的方法是仔细扫描build.xml来搜寻所有编译时和运行时jar。如果你将它转换为Maven,这应该是你应该做的事情。我想要寻找的关键部分是javac和java Ant任务。

作为旁注,在创建pom.xml并添加依赖项时,请通过在Eclipse中打开pom.xml并单击Dependency hierarchy选项卡来关注依赖层次结构。这有望阻止您添加冗余的顶级依赖项。

答案 1 :(得分:0)

Eclipse Java自然依赖关系倾向于在project/.classpath文件中定义。容器依赖项(目标服务器)将列为kind="con";这将提供像servlet API依赖的东西。

Web模块(WST)依赖项在project/.settings/org.eclipse.wst.common.component(“虚拟”lib目录jar)中定义。

如果您的WAR是EAR文件的一部分,您可能还需要检查project/WebContent/META-INF/MANIFEST.MF类路径属性。

这可能不包括您在运行时需要的所有瞬态依赖项(依赖项的依赖项)。

我应该补充一点,就像Eclipse Helios这样的实现细节是正确的,但可能会有所变化。


请注意,Maven和Ant是不同的野兽。 Maven可以根据需要提供瞬态依赖关系,而Ant脚本可能必须明确定义它们。

您不需要将JRE库添加到pom.xml中(尽管您可能需要设置Java版本)。鉴于JUnit位于Ant脚本依赖项列表中,这看起来更像是单元测试依赖项列表而不是运行时列表。

答案 2 :(得分:-1)

你的方法似乎对我而言。构建工具的变化实际上是项目中的一个重大变化。 Ant和maven不会以相同的方式处理依赖关系,因此从一个工具转换到另一个工具需要大量的人工而且你做得对。

但是你的选择似乎很好,我更容易将maven用于依赖,尽管其他任务(如部署,文件复制等)可能比使用ant而不是maven更容易实现。

此致  斯特凡

相关问题