【问题标题】:When trying to run a simple ant script from gradle, I am getting "srcdir does not exist"当试图从 gradle 运行一个简单的 ant 脚本时,我得到“srcdir 不存在”
【发布时间】:2015-12-19 06:40:31
【问题描述】:

我正在尝试从 gradle 运行一个简单的最小 ant 脚本。 我的 build.gradle 只有 ant import 语句

ant.importBuild 'build.xml'

我的 ant build.xml 如下所示。请注意,当我使用 ant compile 时,这可以正常工作。

<?xml version="1.0"?>
<project name="SampleProject" default="antCompile" basedir="SampleProject">
<target name="antCompile">     
    <mkdir dir="build/classes" /> 
    <javac srcdir="src" destdir="build/classes" /> 
</target> 
<target name="compress" depends="antCompile"> 
    <mkdir dir="build/jar" /> 
    <jar destfile="build/jar/SampleProject.jar" basedir="build/classes" /> 
</target>
</project>

但是当我尝试在命令提示符中使用以下命令运行 antCompile 目标时。

gradle antCompile

我得到“srcdir 不存在”异常。

但是,如果我将 build.xml 修改为以下内容:

<?xml version="1.0"?>
<project name="SampleProject" default="antCompile" basedir=".">

    <target name="antCompile">     
        <mkdir dir="SampleProject/build/classes" /> 
        <javac includeAntRuntime="false" srcdir="SampleProject/src" destdir="SampleProject/build/classes" /> 
    </target> 

    <target name="compress" depends="antCompile"> 
        <mkdir dir="SampleProject/build/jar" /> 
        <jar destfile="SampleProject/build/jar/SampleProject.jar" basedir="SampleProject/build/classes" /> 
    </target>

</project>

我能够从 gradle 成功运行脚本。 请注意,在这两种情况下,使用 ant 工具编译都可以。

我无法确定为什么我的第一种方法在运行 gradle 时不起作用。任何帮助将不胜感激。

【问题讨论】:

    标签: java ant gradle build


    【解决方案1】:

    似乎是org/gradle/api/internal/project/DefaultAntBuilder.java的限制
    在gradle-core-xx.jar中

      public void importBuild(Object antBuildFile, Transformer<? extends String, ? super String> taskNamer) {
        File file = this.gradleProject.file(antBuildFile);
        File baseDir = file.getParentFile();
    
        Set existingAntTargets = new HashSet(getAntProject().getTargets().keySet());
        File oldBaseDir = getAntProject().getBaseDir();
        getAntProject().setBaseDir(baseDir);
    

    表示 basedir 设置为包含 antscript 的目录,而不是 导入的ant文件的basedir属性。
    -- 编辑 --
    找到open issue on gradle.org

    【讨论】:

    • 感谢您指出这一点以及指向未解决问题的链接:)
    • 还有关于最佳解决方法的想法吗?我最初的反应是不要强制更改我的 ant 文件。谢谢!
    • @Harypain 未解决的问题包含两种可能的解决方法,你试过了吗?
    • 是的,我试过了。第一个解决方法是创建第二个 ant 文件。其次是在创建的 AntTarget gradle 任务上设置 baseDir。第一个看起来“不好”,所以我坚持第二个。只是想知道有没有更好的。
    • @Harypain 最好的方法是将您的 ant 脚本移动到 gradle。如果那不是选项,我会坚持使用第二个选项 - 设置 basedir。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多