代码之家  ›  专栏  ›  技术社区  ›  philant

Ant是否提供了一种绕过依赖关系的方法?

  •  13
  • philant  · 技术社区  · 16 年前

    build.xml有一个 测试 和A 建造 目标。这个 测试 目标显然取决于 建造 目标。

    我怎样才能只运行测试目标, 暂时地 是否跳过编译,而不修改build.xml文件?

    我这样问是因为编译太长了,并且由一个持续集成服务器保持最新;我在追寻单元测试的一个问题。

    5 回复  |  直到 16 年前
        1
  •  19
  •   John Sonmez    16 年前

    不,不修改生成文件就不能跳过它。

    下面是我在项目中为解决这个问题所做的工作。 对于每个公共目标,我将创建一个前面有“do-”的私有目标。 私有目标没有依赖关系,公共目标将“do-”目标作为依赖关系。

    例如:

    <target name="compile" depends="init, do-compile" description="Compiles all of the source code" />
    
    <target name="do-compile">
            <javac destdir="${classes.dir}" debug="true" encoding="ISO-8859-1">
                <src refid="src.path" />
                <include name="*.java" />
                <classpath refid="external.libraries.classpath" />
            </javac>
    </target>
    
        2
  •  29
  •   sblundy    16 年前

    使用 unless 属性。

    <target name="test" unless="dont.run.tests">
    

    如果您不想运行“测试”,只需

    ant-ddont.run.tests=真

    如果希望运行测试,则应该未定义。蚂蚁只是检查它是否有定义。此外,还有一个 if 相反的属性。

    这里有一个 article 两者兼而有之。

        3
  •  4
  •   Jon Skeet    16 年前

    就我个人而言,我在Ant中发现依赖性的东西不仅仅是帮助。我通常设置两组目标-一组实际上 做东西 (没有依赖关系)然后针对 只是 有依赖关系。这样,您就可以轻松地运行单个目标,也可以轻松地运行整个套件等。这与 实际的 (而不是意识形态)在我看来是有用的。

        4
  •  2
  •   Dan Dyer    16 年前

    如果代码没有更改,编写良好的生成目标将不需要重新生成任何内容。因此,测试目标依赖于它的事实在很大程度上应该是无关紧要的。如果您连续两次运行构建目标,并且它试图第二次重建某个对象,那么您可能需要调查它为什么要这样做。

    避免执行目标的简单方法是将目标的“除非”属性设置为某个属性的名称。然后,如果在运行Ant时在命令行上设置此属性,它将绕过该目标。

        5
  •  0
  •   PPS    16 年前

    只是暂时“删除”依赖关系?`如果代码已经生成,那么所有文件都应该是可用的,不是吗?-哎呀,刚才看到你不能修改文件了,嗯,为什么不先在本地运行同一个作业呢?