在Eclipse中使用Ant添加在运行时生成的文件夹作为源文件夹

时间:2013-01-31 14:04:34

标签: java eclipse ant classpath

我正在使用以下一堆软件:

  1. Ant 1.7.1
  2. Eclipse Helios
  3. Java 1.6
  4. Apache thrift 0.8.0
  5. 我使用Thrift使用以下代码块在Ant中生成java源代码:

    <exec executable="thrift-0.8.0.exe" osfamily="windows">
        <arg value="-out" />
        <arg value="java/src" />
        <arg value="--gen" />
        <arg value="java" />
        <arg file="Sample.thrift" />
    </exec>
    

    所以,现在我想add生成的src文件夹自动转到项目classpath的{​​{1}},以便在我打开时in Eclipse using Ant Eclipse中的项目。

    注意:我知道项目的类路径存在于shown as a source folder文件中,而.classpath会解决我的问题。但我希望Eclipse能够做到这一点而不是我手动在.classpath文件中进行。

    此外,我还查看了Ant-Eclipse project并找到了一个Ant任务来创建一个新的Eclipse Java项目并将其adding a classpathentry文件夹显示为源文件夹。但我不希望依赖外部库。

    src

    有没有办法在Eclipse中现有的Ant库中执行此操作?

    非常感谢!

2 个答案:

答案 0 :(得分:1)

eclipse .classpath文件是一个XML文档,因此在其中添加源文件夹涉及编辑XML。不幸的是,Ant没有任何内置的工具来以任何有意义的方式操作XML。我自己用xmltask来编辑.classpath和.project文件,但这是你说你真的不想要的外部库。

然而,所有内容都不会丢失 - Ant supports running scripts,包括Groovy, which treats XML as a first-class citizen。我希望我可以说我有足够的Groovy经验给你提供更多的链接,但你对appendNode()的一些调用看起来非常可行。

答案 1 :(得分:0)

如果你真的不想依赖任何外部的东西,那么你可以考虑使用XSLT样式表来编辑.classpath文件(这是XML)。

添加-dir.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:param name="pathToAdd" />

  <xsl:strip-space elements="*" />
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="classpath">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
      <!-- don't add a 2nd copy of the classpathentry if one already exists -->
      <xsl:if test="not(classpathentry[@kind = 'src'][@path = $pathToAdd])">
        <classpathentry kind="src" path="{$pathToAdd}" />
      </xsl:if>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

<强>的build.xml

<xslt in=".classpath" out=".classpath.edited" style="add-dir.xsl">
  <param name="pathToAdd" expression="java/src" />
</xslt>
<move file=".classpath.edited" tofile=".classpath" overwrite="yes" />