【问题标题】:Determining Java Project Dependencies in Eclipse在 Eclipse 中确定 Java 项目的依赖关系
【发布时间】:2011-11-02 08:53:07
【问题描述】:

这是一个非常愚蠢的问题,我知道...但是我正在将一个使用 Ant 构建的 Java 项目转换为使用 Apache Maven 来实现。我读过的完成此操作的步骤之一是将所需的所有 JAR 项目作为依赖项放在 pom.xml 文件中。现在,由于我对这个项目不太熟悉,是否有任何属性设置我可以查看以清楚地查看所有 JAR 依赖项?我知道有些在 WEB-INF\lib 目录中,但是查看 Ant 的原始 build.xml 文件,似乎比它试图添加的要多。同样,我对所有这些概念都很陌生,但我只是希望有一种简单的方法来确定 Java 项目具有哪些依赖项,以便我可以将它们(或它们的 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 文件中没有看到任何这些 jar。此外,JRE 系统库与 JAR 文件列表一起列在我的包资源管理器下。现在,我是否也需要将这些添加到我的依赖项列表中?这是我得到的:

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

【问题讨论】:

  • 总而言之,我在项目的各个位置列出了一堆 JAR 文件...我认为哪些“依赖项”需要放在 pom.xml 中我的项目的文件/
  • JRE 库就是 JRE 的一部分。那些应该被假定在那里。您需要包含的库是其他地方列出的库。

标签: java eclipse maven dependencies project


【解决方案1】:

Eclipse Java 自然依赖项往往在project/.classpath 文件中定义。容器依赖项(目标服务器)将列为kind="con";这将提供诸如 servlet API 依赖项之类的东西。

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

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

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

我应该补充一点,这些事情在 Eclipse Helios 中是正确的实现细节,但可能会发生变化。


请注意,Maven 和 Ant 是不同的野兽。 Maven 可以根据需要提供临时依赖项,而 Ant 脚本可能必须显式定义它们。

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

【讨论】:

  • 我明白了...我在.settings 目录中找不到common.component 文件,但我确实设法在记事本++ 中打开了.classpath 文件。唯一列出的罐子是这样的:&lt;classpathentry kind="lib" path="WebRoot/WEB-INF/lib/jtds-1.2.4.jar"/&gt;。这是否意味着jtds-1.2.4.jar 是唯一的依赖项?
  • @Kris 我添加了更多细节。如果 Ant 生成的 WAR 有效,那么我建议将这些库作为依赖项添加到您的 pom.xml 中。 Scope 其他一切视情况而定。
  • .classpath 文件似乎包含一个 JAR 和两个容器。我假设我应该包含 JAR,但我是否也需要包含容器?如果是这样......他们的 Maven 等价物是容器吗?另外,我似乎没有org.eclipse.wst.common.component 文件;我只有一个org.eclipse.m2e.core.prefsorg.eclipse.jdt.core.prefs 文件。我是否也应该尝试将其中包含的内容添加为依赖项?第二个文件中的大部分内容都像org.eclipse.jdt.core.compiler."stuff" 一样列出。
【解决方案2】:

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

在 Ant 方面,我假设运行时所需的 jar 将与构建的其余部分一起复制到某个地方。如果您的项目正在构建到 WAR 中,则尤其如此。

如果没有复制任何内容,那么最好的办法是通过仔细扫描 build.xml 来查找所有编译时和运行时 jar。如果您要将其转换为 Maven,那么无论如何您都应该这样做。我想要寻找的关键部分是 javac 和 java Ant 任务。

附带说明,当您创建 pom.xml 并添加依赖项时,请通过在 Eclipse 中打开 pom.xml 并单击“依赖关系层次结构”选项卡来密切关注依赖关系层次结构。这有望防止您添加多余的顶级依赖项。

【讨论】:

  • 好的,我明白你说的更好了。所以我的 WEB-INF\lib 中列出的 JAR 是编译时 JAR,而 Ant build.xml 文件中提到的那些是运行时 JAR?好吧,我是否需要将它们都作为依赖项添加到 pom.xml 文件中(当然要跟踪冗余依赖项)?
  • WEB-INF/lib 中列出的任何内容都可能是您构建和运行 Web 应用程序所需的一切。如果没有,那么您可能需要处理一个简单的边缘情况。 (不要忘记为您认为有用的答案投票,并选择一个作为“最佳”答案!)
  • 好的。只需要这两个 JAR 文件作为依赖项似乎很奇怪。无论如何,我会支持某些帖子,但我不是会员,而且我的工作代理不允许我访问创建帐户所需的网站,哈哈。
  • @Kris:你还不是会员?你看起来像一个。
  • 大声笑,不。我已经尝试过了,但是整个代理问题都会阻碍。我一直想在家里的电脑上注册一个帐户……我只是一直忘记。
【解决方案3】:

你的方法对我来说似乎是正确的。构建工具的更改实际上是项目的重大更改。 Ant 和 maven 处理依赖关系的方式不同,因此从一种工具转换到另一种工具需要大量的人工工作,而您做对了。

但是您的选择似乎不错,我认为使用 maven 来实现依赖项要容易得多,尽管使用 ant 完成其他任务(如部署、文件复制等)可能比使用 maven 更容易。

问候, 斯蒂芬

【讨论】:

  • 这根本不能回答问题。
  • 是的,我花了一段时间才明白切换的目的,但是有了在 maven 或我们本地的第三方存储库上找到的所有依赖项,我们不需要 lug他们到处都是。我的问题只是确定需要在我的 pom.xml 文件中包含哪个 jar 文件乱扔项目。
猜你喜欢
  • 2012-12-17
  • 2011-10-19
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多