当尝试 运行 来自 gradle 的简单 ant 脚本时,我得到 "srcdir does not exist"
When trying to run a simple ant script from gradle, I am getting "srcdir does not exist"
我正在尝试 运行 来自 gradle 的一个简单的最低限度的 ant 脚本。
我的build.gradle只有ant import语句
ant.importBuild 'build.xml'
我的蚂蚁 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 doesnot exist" 异常。
但是,如果我将 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 时不起作用。任何帮助将不胜感激。
似乎是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
我正在尝试 运行 来自 gradle 的一个简单的最低限度的 ant 脚本。 我的build.gradle只有ant import语句
ant.importBuild 'build.xml'
我的蚂蚁 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 doesnot exist" 异常。
但是,如果我将 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 时不起作用。任何帮助将不胜感激。
似乎是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