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

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

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

    build.xml有一个 测试 以及a 建筑 目标。这个 测试 目标显然取决于 建筑 目标。

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

    我之所以问这个问题,是因为编译时间太长,并且由持续集成服务器保持最新;我正在追查单元测试的一个问题。

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

    使用 unless 属性。

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

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

    ant-dmont.run.tests=true

    如果你想运行测试,它应该是未定义的。Ant只是检查它是否被定义。此外,还有一个 if 相反的属性。

    这是一个 article 在两者上。

        2
  •  29
  •   sblundy    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>
    
        3
  •  4
  •   Jon Skeet    16 年前

    就我个人而言,我发现Ant中的依赖性问题不仅仅是一种帮助。我通常设定两组目标——一组实际上 露一手 (没有依赖关系),然后目标 只是 有依赖关系。这样,您可以轻松运行单个目标,也可以轻松运行整个套件等。这符合 实际的 (而非意识形态)在我看来。

        4
  •  2
  •   Dan Dyer    16 年前

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

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

        5
  •  0
  •   PPS    16 年前

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

    推荐文章