首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ant-javac看不到Gradle中的依赖项

Ant-javac看不到Gradle中的依赖项
EN

Stack Overflow用户
提问于 2015-02-18 21:58:08
回答 2查看 1.1K关注 0票数 0

我正在尝试从ant迁移到gradle。第一阶段是将所有依赖项迁移到gradle.build,并仍然通过ant构建war。

在蚂蚁构建任务中看起来是这样的:

代码语言:javascript
复制
<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>

在Gradle中,我使用以下代码导入build.xml:

代码语言:javascript
复制
ant.importBuild('build.xml') { antTargetName ->
    'ant_' + antTargetName
}

问题是ant任务(./gradlew ant_build)没有Gradle (dependencies { ... })的依赖关系。如何将它们放入类路径(不修改ant build)?

EN

回答 2

Stack Overflow用户

发布于 2015-02-18 23:02:17

您可以通过以下操作将依赖项添加到项目的AntBuilder实例中:

代码语言:javascript
复制
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

然而,这是一个“老生常谈”的解决方案。

如果可以将ant构建脚本移动到单独的ant任务文件,那么使用taskdef是更好的解决方案。在这种情况下,您可以执行以下操作:

代码语言:javascript
复制
ant.taskdef(name: 'myAntTask',
            classname: 'my.ant.Task',
            classpath: configurations.compile.asPath)
票数 2
EN

Stack Overflow用户

发布于 2017-09-08 00:27:01

我使用复制任务将我所有的gradle依赖项放入我在ant master-classpath上声明的{libs}文件夹中。

代码语言:javascript
复制
//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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28585437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档