【问题标题】:Eclipse buildpath automatically taking all JARs of a internal directoryEclipse buildpath 自动获取内部目录的所有 JAR
【发布时间】:2010-10-03 18:29:39
【问题描述】:

如何配置我的项目构建路径以使位于同一目录中的一组 .jar 文件自动包含在构建路径中? 这意味着将新的 .jar 文件添加到此目录(并刷新项目)会更新构建路径? Rem:我不是在 Web 应用程序中工作,而是在独立的 Java 应用程序中工作。我知道在动态 Web 项目中可以将位于 WEB-INF/lib 中的所有 .jar 包含在构建路径中。是否可以在独立应用程序中执行相同的包含?

我正在使用 Eclipse 3.4

【问题讨论】:

    标签: java eclipse


    【解决方案1】:

    AFAIK,没有正常的方法可以做到这一点。

    如果你真的想要,这里有一个小技巧。 Eclipse .classpath 文件是一个非常简单的 XML。 您可以编写脚本或 ant 任务来遍历目录、更新 .classpath xml 并刷新项目。

    【讨论】:

    • +1。我不知道你为什么因此而被否决。我做过类似的事情,而且效果很好。为了更进一步,您可以将脚本添加为构建器,以便在清理项目时自动触发...
    【解决方案2】:

    使用自制的“ClassPath Container”可以解决问题,但需要您构建一个 Eclipse 插件:http://www.ibm.com/developerworks/edu/os-dw-os-eclipse-classpath.html

    【讨论】:

    • 完全正确 - 类路径容器很容易编写,但您需要提供一个插件供团队其他成员使用
    • 链接不存在了
    【解决方案3】:

    我的同事实现了一个类路径容器,它递归地在工作空间内的给定目录中查找 jar,看看 http://openscada.org/2010/05/31/adding-a-directory-as-class-path-to-eclipse/

    更新站点可以在http://repo.openscada.org/p2/bob/R找到

    该插件在 LGPL V3 下获得许可,您可以在 https://github.com/ctron/org.openscada.bob 下找到源代码

    【讨论】:

    • 修复了文章的死链接。这正是我想要的!
    • 谢谢,我也修复了svn链接,我们前段时间搬到了git
    • 所有链接都失效了。
    【解决方案4】:

    使用 Maven2,并使用 Eclipse Maven2 插件。

    【讨论】:

    • 或 Ivy 与 IvyDE 插件。
    【解决方案5】:

    意味着添加一个新的 .jar 文件到 此目录(并刷新 project) 更新构建路径

    抱歉,Eclipse 不支持这个。

    【讨论】:

      【解决方案6】:

      在 Windows 机器上,您可以在命令行上使用一个 liner 执行 uzhin 所说的操作。

      假设您在 Eclipse 中设置了一个名为 AXIS2_HOME 的变量,该变量指向 c:\javalibs\axis2-1.4.1,此示例使用“for”命令迭代 c:\javalibs 中的所有 .jar 文件\axis\lib 目录并将 .classpath 节点写入一个名为 addto.classpath 的文件。 (注意:克拉字符 ^ 在命令行中转义了 ,因此它们不会像通常那样做。)

      for %i in (c:\javalibs\axis2-1.4.1\lib\*.jar) do @echo     ^<classpathentry kind="var" path="AXIS2_HOME/lib/%~ni%~xi"/^>  >> addto.classpath
      

      你最终会在文件中得到类似的东西......

      <classpathentry kind="var" path="AXIS2_HOME/lib/activation-1.1.jar"/>
      <classpathentry kind="var" path="AXIS2_HOME/lib/annogen-0.1.0.jar"/>
      <classpathentry kind="var" path="AXIS2_HOME/lib/axiom-api-1.2.7.jar"/>
      <classpathentry kind="var" path="AXIS2_HOME/lib/axiom-dom-1.2.7.jar"/>
      ...
      

      然后您可以复制这些行并将它们粘贴到实际 .classpath 文件的明显位置。

      【讨论】:

        【解决方案7】:

        我正在使用我在阅读 similar question 后开发的解决方法。我把它贴在这里,因为这个问题的范围有点不同,如何使用那里写的建议可能并不明显。

        1. 新建动态网页项目(默认设置没问题,速度很快)
        2. 删除WebContent/WEB-INF/下的目录“lib”
        3. 重新创建该目录,但将其创建为指向主项目中 jar 所在目录的链接
        4. 在项目的 Java 构建路径设置中的 Order 和 Export 选项卡上检查 Web App Libraries 选项
        5. 将此新创建的项目作为依赖项添加到您的主项目中

        对项目中的每个 lib 目录执行此操作很烦人,但它比每次执行 svn update 时手动添加 jar 更好(来自使用 Idea 的幸运同事)。可惜 Eclipse 没有这个功能。

        【讨论】:

          【解决方案8】:

          您可以使用 Eclipse 中的用户库来组织一组 jar 文件。如果您有一组在多个项目中使用的 jar 文件,您可以创建一个用户库来引用这组 jar 文件。因此,您需要在项目的构建路径中包含用户库,而不是所有单独的 jar 文件。

          <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/User Library name"/>
          

          http://www.avajava.com/tutorials/lessons/what-is-a-user-library-and-how-do-i-use-it.html;jsessionid=ACD75E0A035BDC3AC656B481A7830FB6

          【讨论】:

          • 唯一的问题是用户库中 jar 文件的路径必须是绝对路径。这会在团队(版本控制)环境中导致问题,在该环境中,人们有不同的工作空间绝对路径。要解决此问题,您可以创建一个 CLASSPATH VARIABLE,但随后每个人都必须创建该变量,然后事情就会变得混乱,很快。
          • 这不是必需的:添加自动添加到构建路径的新库。用户库需要编辑和显式添加 jar,因此您只需转移问题。
          【解决方案9】:

          我构建了一个生成 .classpath(和 .project)的工具,但它要求您在 ant 构建中指定 jar 列表。它可能可以扩展为读取 jar 文件列表。

          http://sweetened.googlecode.com/

          【讨论】:

            【解决方案10】:

            您是否尝试过在类路径中使用通配符?所以你会使用类似的东西:

            javac MyApp.java -cp /some/path/to/libraries/*.jar
            

            我有一段时间没有使用 java,所以不确定上述是否可行,但这是我期望的语法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-14
              • 2023-03-31
              • 1970-01-01
              • 2013-05-10
              相关资源
              最近更新 更多