2015-02-18 5 views
0

Я пытаюсь перейти от муравья к граде. Первой фазой является перемещение всех зависимостей на gradle.build и по-прежнему строить войну с помощью муравья.Ant-javac не видит зависимости от Gradle

В муравей задачи строительства выглядит следующим образом:

<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 с этим кодом:

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

Проблема заключается в том, что муравей задача (./gradlew ant_build) Безразлично» t имеют зависимости от Gradle (dependencies { ... }). Как я могу поместить их в classpath (без изменения сборки ant)?

ответ

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 

Однако, это «Hacky» решение.

Использование taskdef - лучшее решение, если скрипт сборки муравья можно перенести в отдельный файл задач ant. В этом случае, вы можете сделать следующее:

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

Я использовал задачу копирования, чтобы поместить все мои 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 
Смежные вопросы