Java 当试图从gradle运行一个简单的ant脚本时,我得到;“srcdir不存在”;

Java 当试图从gradle运行一个简单的ant脚本时,我得到;“srcdir不存在”;,java,ant,gradle,build,Java,Ant,Gradle,Build,我正在尝试从gradle运行一个简单的最小ant脚本。 My build.gradle只有ant导入语句 ant.importBuild 'build.xml' 我的ant build.xml如下所示。请注意,当我使用ant compile时,这可以很好地工作 <?xml version="1.0"?> <project name="SampleProject" default="antCompile" basedir="SampleProject"> <targ

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

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>
我得到了“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时不起作用。任何帮助都将不胜感激。

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

的限制

  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);

public void importBuild(Object-antBuildFile,transformer,谢谢你指出它,还有打开的问题的链接:),还有关于最佳解决方案的想法吗?我最初的反应是不强制更改我的ant文件。谢谢@Harypain开放版包含两种可能的解决方法,你试过了吗?是的,我试过了。第一个解决方法是创建第二个ant文件。第二个是在创建的AntTarget gradle任务上设置baseDir。第一个看起来很糟糕,所以我坚持第二个。只是想知道是否有更好的方法。@Harypain最好是将您的ant脚本移动到gradle。如果没有选择,我会坚持第二个选择——设置basedir。
  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);