Использование подстановочного знака в пути к классам JavaExec с Gradle - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть сторонняя сборка 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это позволило бы мне сделать это, но может ли кто-нибудь придумать хороший способ решить эту проблему?

1 Ответ

0 голосов
/ 13 февраля 2019

Похоже, что баночка с дорожкой будет достаточной в этом случае:

task pathingJar(type: Jar) {
    appendix = 'pathing'
    doFirst {
        manifest {
            attributes 'Class-Path': fileTree(dir: libPath, include: '*.jar').join(' ')
        }
    }
}

task cucumber(dependsOn: 'pathingJar') {
    doLast {
        ...
        javaexec {
            ...
            classpath = sourceSets.main.output +
                        sourceSets.test.output +
                        files(pathingJar.archivePath)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...