蚂蚁javac还没有看到从摇篮依赖(Ant-javac doesn't see depend

2019-11-03 15:07发布

我试图从蚂蚁迁移到摇篮。 的第一阶段是把所有依赖判断gradle.build并且仍可以通过Ant构建战争。

在蚂蚁建设任务看起来像这样:

<fileset id="project-libraries" dir="${project.libs.path}">
    <include name="*jar"/>
</fileset>

<path id="master-classpath">
    <fileset refid="project-libraries"/>
    <fileset refid="tomcat"/>
    <fileset refid="hibernate-tools"/>
    <fileset refid="findbug"/>
    <pathelement path="${build.dir}"/>
</path>

<target name="build" description="Build the application">
    <javac destdir="${build.dir}" target="${javac.version}" source="${javac.version}" nowarn="true" deprecation="false" optimize="false" failonerror="true" encoding="utf-8" debug="on">
        <src refid="src.dir.set"/>
        <classpath refid="master-classpath${master-classpath-version}"/>
        <compilerarg value="-Xlint:-unchecked"/>
    </javac>
</target>

在摇篮我进口的build.xml使用此代码:

ant.importBuild('build.xml') { antTargetName ->
    'ant_' + antTargetName
}

问题是,Ant任务( ./gradlew ant_build )没有从摇篮依赖( dependencies { ... } 我怎样才能把它们放到classpath中(无需修改Ant构建)?

Answer 1:

你可以做以下的依赖关系添加到项目的AntBuilder实例:

task antClasspathSetter {        
    doLast {
        def antClassLoader = org.apache.tools.ant.Project.class.classLoader
        configurations.compile.each { File f ->
            antClassLoader.addURL(f.toURI().toURL())
        }
    }
}

ant_build.dependsOn antClasspathSetter

然而,这是一个“哈克”的解决方案。

使用taskdef是一个更好的解决方案,如果Ant构建脚本可以被移动到一个单独的蚂蚁任务文件。 在这种情况下,你可以做到以下几点:

ant.taskdef(name: 'myAntTask',
            classname: 'my.ant.Task',
            classpath: configurations.compile.asPath)


Answer 2:

我用了一个副本任务,把所有的gradle我的依赖,到我在我的蚂蚁主类路径宣布{}的库文件夹。

//add property
<property name="lib.dir"   value="${basedir}/lib" /></pre>

//tell ANT to put all jars in folder on classpath
<path id="master-classpath">
    <fileset dir="${lib.dir}">
        <include name="**/*.jar" />
    </fileset>

....
</path>

// copy task goes in your build.gradle file
task copyGradleDependenciesInAntFolder(type: Copy) {
    from configurations.compile
    into 'lib'
}

// make sure to run it before your {ant_build} target
{ant_build}.dependsOn copyGradleDependenciesInAntFolder


文章来源: Ant-javac doesn't see dependencies from Gradle