【问题标题】:Adding a folder generated at runtime as source folder using Ant in Eclipse在 Eclipse 中使用 Ant 添加运行时生成的文件夹作为源文件夹
【发布时间】:2013-01-15 15:56:07
【问题描述】:

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

  1. 蚂蚁 1.7.1
  2. 日食太阳神
  3. Java 1.6
  4. Apache thrift 0.8.0

我正在使用 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文件夹自动放到项目in Eclipse using Antclasspath,这样当我在Eclipse中打开项目时它就是shown as a source folder

注意: 我了解项目的类路径存在于 .classpath 文件中,adding a classpathentry 可以解决我的问题。但我希望 Eclipse 这样做,而不是我在 .classpath 文件中手动进行。

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

<project name="test" default="eclipse" basedir=".">
    <target name="eclipse">
        <taskdef name="eclipse" classname="prantl.ant.eclipse.EclipseTask" />
        <eclipse>
            <project />
            <classpath>
                <source path="src" />
                <output path="bin" />
            </classpath>
        </eclipse>
    </target>
</project>

有没有办法在 Eclipse 中已经存在的 Ant 库中做到这一点?

非常感谢!

【问题讨论】:

    标签: java eclipse ant classpath


    【解决方案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(),您所追求的看起来非常可行。

    【讨论】:

      【解决方案2】:

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

      add-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" />
      

      【讨论】:

      • 一个非常创新的解决方案,我无法想到!!
      猜你喜欢
      • 2014-10-23
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2013-10-19
      • 1970-01-01
      相关资源
      最近更新 更多