【问题标题】:Eclipse: Ant script to export User Library/Libraries for projectEclipse:用于为项目导出用户库/库的 Ant 脚本
【发布时间】:2011-07-26 21:05:31
【问题描述】:

我是 Java 编程新手。我最初是从 NetBeans 开始的,但在朋友的建议下,我转向了 Eclipse。

在 NetBeans 中,为项目预先编写的 ant 构建脚本会生成一个 Project.jar 文件并将所有需要的库/jar 放在 lib/ 文件夹中。

但是,在 Eclipse 中,我似乎需要编写自己的 ant 脚本。我写了几行来生成jar文件:

<target name="compile"> <mkdir dir="${build.dir}"/> <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="jars" debug="on"/> </target>

如何编写命令将用户库中的所有 jar 复制到 ${build.dir}/lib/ 文件夹?

谢谢。

【问题讨论】:

  • 替代问题:鉴于我的 Java 类文件存储在“src/”中,并且在我的用户库中定义了一组相关的 .jar 文件,有人可以发布一个示例 build.xml 编译的脚本将 src 文件复制到“./dist/Project.jar”,将库中定义的 .jar 文件复制到“./dist/lib/”文件夹,并在 jar 中生成必要的清单文件?

标签: java eclipse ant jar


【解决方案1】:

使用copy 任务

像这样,使用适当的包含或排除模式

  <copy todir="${build.dir}/lib/">
    <fileset dir="src_dir">
      <include name="**/*.jar"/>
    </fileset>
  </copy>



 <copy todir="${build.dir}/lib/">
    <fileset dir="src_dir" excludes="**/*.java"/>
  </copy>

【讨论】:

  • 感谢您的回复。但是,我不确定这是否是我想要的。在我的 Eclipse 项目中,我有一个包含所有源代码的“src/”文件夹。我还定义了一些用户库。例如,我定义了一个名为 Apache Commons 的用户库,其中包含一些我在项目中使用的 jar(特别是 commons lang 和 commons math)。我想要的是一个简单的 Ant 脚本,它将“src”文件编译成 Project.jar,并自动将用户库(在本例中为 commons-lang-2.6.jar 和 commons-math)复制到“lib/”文件夹-2.6.jar)。
  • 是的 - 所以你可以通过在 javac 之后将我的帖子的 copy 位添加到你已经拥有的 target 中来做到这一点
  • 您的解决方案似乎将 *.jar 从 src 目录复制到 lib 文件夹。但是,我希望复制的 .jar 文件不在 src 目录中。相反,它们存储在我机器上的不同位置并在我的用户库中引用。例如,在.classpath 文件中有一行读取&lt;classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Apache Commons"/&gt;。这是我希望包含在 dist/lib 文件夹中的用户库中的 .jar。知道如何做到这一点吗?
  • 我认为 ant 不会读取构建的类路径条目,请查看 stackoverflow.com/questions/1073693/… 以及
  • 我相信您上面的评论(“我不认为 ant 读取 classpathentry”)是我问题的答案。我已经重组了我的项目文件,不再将所需的 jars 放在用户库中,而是现在将它们保存在我项目中的 lib 文件夹中。感谢您的帮助。
【解决方案2】:

如果您是 Java 新手,不妨看看maven。它是一个类似于 ant 的构建工具,具有许多预定义的“目标”和完全开发的依赖关系(对其他库)处理。您会找到一个非常有用的eclipse plugin

Maven 项目有一个特殊的directory layout,这是一种最佳实践,对初学者很有帮助。如果你在一个 maven 项目上工作,你可以使用命令

mvn dependency:copy-dependencies

作为控制台命令(或 eclipse 运行配置)将您的项目依赖项(库)复制到 &lt;project&gt;\target\dependency 目录。

【讨论】:

    【解决方案3】:

    我建议将ant4eclipse library 用于基于 ant 的 Eclipse 项目。使用时可以访问eclipse工作区/项目设置,可以在ant中迭代tought eclipse项目类路径。

    参见下面的示例代码:

    <path id="ant.classpath">
        <fileset dir="${lib.dir}/ant4eclipse">
            <include name="*.jar" />
    </fileset>
    
    <taskdef resource="net/sf/antcontrib/antlib.xml" />
    <taskdef resource="net/sf/ant4eclipse/antlib.xml" />
    
    <targetPlatform
    
    <target name="copy_jars">
      <getEclipseClasspath workspace="${basedir}/.."
                           projectname="TestProject"
                           targetPlatformLocation="c:/eclipse"
                           property="classpath"
                           relative="false"
                           runtime="true"
                           pathseparator="#" />
    
      <!-- iterate over all classpath entries -->
      <foreach list="${classpath}" delimiter="#"
        target="copy_jar_file" param="classpath.entry" />
    </target>
    
    <target name="copy_jar_file">
      <!-- check if current is a .jar-file ... -->
      <if>
        <isfileselected file="${classpath.entry}">
          <filename name="**/*.jar" />
        </isfileselected>
        <then>
          <!-- copy the jar file to a destination directory -->
          <copy file="${classpath.entry}" tofile="${dest.dir}"/>
        </then>
      </if>
    </target>
    

    如果您想使用用户库,可以通过userlibraries 命令定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      相关资源
      最近更新 更多