У меня есть сторонняя сборка Gradle, которая запускает некоторые тесты на другой старой сборке Ant, которая у меня есть.Эта старая сборка ant содержит TON библиотек, и я хочу, чтобы моя сборка Gradle, запускающая тест, содержала их в своем classpath при запуске тестового набора (в данном случае cucumber).Тем не менее, поддержание гигантского списка зависимостей в синхронизации кажется подверженным ошибкам, и преобразование сборки Ant в унифицированную сборку Gradle на самом деле сейчас не в картах (насколько я хочу).
ИтакЯ думал, что мог бы просто ссылаться на файлы jar в сборке Ant внутри пути к классу оболочки JavaExec.Кажется достаточно простым, поэтому я попробовал это:
javaexec {
...
classpath = sourceSets.main.output +
sourceSets.test.output +
fileTree(dir: libPath, include: '*.jar')
}
libPath
- это путь к каталогу lib сборки Ant, содержащему все файлы jar.Однако, из-за огромного количества зависимостей здесь, я получаю это прекрасное исключение времени выполнения при выполнении:
Caused by: java.io.IOException: Cannot run program "C:\Java\jdk1.8.0_161\bin\java.exe" (in directory "C:\development"): CreateProcess error=206, The filename or extension is too long
at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
... 7 more
Caused by: java.io.IOException: CreateProcess error=206, The filename or extension is too long
... 8 more
Я видел эту песню и танец раньше в сборке Ant.Это потому, что путь к классу просто слишком длинный.Если бы я мог определить путь к классу сам, я мог бы дать ему каталог пути *.jar
(без разнесения на отдельные файлы jar), и он работал бы, сокращая путь к классам, но все равно включая все.Однако, поскольку classpath
здесь представляет собой FileCollection
, я не вижу способа предоставить подстановочный знак непосредственно для пути к классу без разрыва.
Может быть, я что-то упустил в DSL или FileCollectionsэто позволило бы мне сделать это, но может ли кто-нибудь придумать хороший способ решить эту проблему?