Я работаю над переносом одного из наших Java-проектов ANT и MAVEN в GRADLE.Я могу перенести часть сборки и небольшую муравьиную цель с помощью пользовательской задачи Gradle.Однако у нас есть некоторый код, написанный на Java, который расширяет org.apache.tools.ant.Task, и он вызывается во время выполнения через ant с использованием build.xml.У build.xml есть typedef, ссылающийся на задачу ant (например, MyDataImportTask), которая перебирает список наборов файлов (различные файлы из некоторого шаблона сопоставления каталогов), а затем выполняет некоторые обновления в базе данных или что-то в этом роде.У него есть зависимости от библиотек, таких как hibernate, apache ant и т. Д.
Теперь я пытаюсь написать пользовательскую задачу, используя gradle для переписывания этого класса, и не могу найти правильный подход.Я застрял, как передать наборы файлов в эту пользовательскую задачу.Я также попытался использовать gradle SourceTask, где мы можем установить исходные объекты, но не работающие.Может кто-нибудь помочь мне, пожалуйста?
Вторая проблема заключается в том, что в настоящее время этот модуль является частью проекта Java.Я пытаюсь переместить его в папку buildSrc для пользовательской задачи, которую я переписываю.У меня такое ощущение, что это неправильный подход.Мне интересно, как передать исходные наборы файлов в скомпилированный файл JAR, а затем вызвать его из пользовательской задачи GRADLE.Может кто-нибудь помочь мне, пожалуйста?
Ниже приведен пример класса, который расширяет задачу ant и затем используется в build.xml для ее выполнения.
public class MyDataImportTask extends org.apache.tools.ant.Task{
private String myPrefix;
//getter setter
private List<FileSet> filesets = new ArrayList<FileSet>();
public void execute() throws BuildException{
ClassLoader cl = getClass().getClassLoader();
((AntClassLoader) cl).setThreadContextLoader();
try{
for (int i = 0; i < filesets.size(); i++) {
FileSet fs = (FileSet) filesets.get(i);
DirectoryScanner ds = null;
try {
ds = fs.getDirectoryScanner(getProject());
} catch (BuildException e) {
getLogger().info("Warning: " + e.getMessage());
continue;
}
final File fromDir = fs.getDir(getProject());
final String[] srcFiles = ds.getIncludedFiles();
if (srcFiles != null) {
//Do something with srcFiles
}
}
}
finally {
((AntClassLoader) cl).resetThreadContextLoader();
}
}
}
У меня есть сборка ANT.xml со следующим кодом:
<typedef name="mydataimport" classname="com.surendra.data.tasks.MyDataImportTask" classpathref="classpath"/>
<mydataimport myPrefix="myData.">
<fileset dir="${rootDir}/MyData/types">
<include name="abc.xmi" />
</fileset>
<fileset dir="${rootDir}/MyData/types">
<include name="*.xmi" />
<exclude name="abc.xmi" />
</fileset>
</mydataimport>
Я ожидаю, что моя пользовательская задача будет вызываться в build.gradle как:
task myDataImportTask(type: MyDataImportTask){
sources = "${rootDir}/MyData/types"
patternToInclude1 ="*.xmi"
patternToExclude ="abc.xmi"
}