我正在迁移到gradle的过程中我们的一个模块说gradle-module。该模块有两个当前用ant构建的依赖项,例如ant-module-1和ant-module-2
在我的gradle-module构建中。Gradle我有以下条目:
task packageAntModule1(type: GradleBuild) {
buildFile = 'antModule1.gradle'
tasks = ['clean', 'package']
}
task packageAntModule2(type: GradleBuild) {
buildFile = 'antModule2.gradle'
tasks = ['clean', 'package']
}
compileJava.dependsOn(['packageAntModule1', 'packageAntModule2'])
两个文件antModule1。gradle和antModule2。Gradle就像这样简单:
antModule1.gradle:
ant.importBuild '../ant-module1/build.xml'
antModule2.gradle:2
ant.importBuild '../ant-module2/build.xml'
我可以在日志中看到,作为构建gradle-module的一部分,ant-module1的目标被执行,然后转移到构建ant-module2。但是这会导致崩溃,因为在构建ant-module1时创建的临时文件无法删除。查看java进程,我可以看到第一个ant调用打开了一个java进程,它仍然保存着我的临时文件(加载一些自定义ant任务)
所以我的问题是,在完成执行所需的目标后,告诉gradle结束ant JVM的方法是什么。
任何关于如何解决我的两个蚂蚁依赖的其他建议也将是感激的。通过artifactory或nexus指向maven库不是一个选项,因为我们的ant构建不使用ivy,这实际上是我们转向gradle的主要原因
最重要的是,在gradle构建失败后,由ant启动的java进程仍然存活,你必须手动杀死它们。
提前感谢您的投入
添加gradle版本
$gradle -version
------------------------------------------------------------
Gradle 2.4
------------------------------------------------------------
Build time: 2015-05-05 08:09:24 UTC
Build number: none
Revision: 5c9c3bc20ca1c281ac7972643f1e2d190f2c943c
Groovy: 2.3.10
Ant: Apache Ant(TM) version 1.9.4 compiled on April 29 2014
JVM: 1.8.0_40 (Oracle Corporation 25.40-b25)
OS: Windows 7 6.1 amd64
您可以移动taskdef
,使其在ant任务中声明吗?这样,类加载器每次触发时都应该被丢弃。
我假设taskdef
是在根级别定义的,因此类加载器在蚂蚁模型在内存中的整个时间都保存在内存中。
另一个解决方法可能是将jar复制到packageAntModule1和packageAntModule2不同的临时位置。