Gradle, shadowJar: использовать перемещение внутри задачи - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующая задача:

task myJar(type: Jar) {
    archiveName = 'myJar.jar'
    includeEmptyDirs = false
    destinationDir = rootProject.libsDir
    dependsOn compileJava

    manifest.attributes('Class-Path': '../lib/commons-lang-2.5.jar')

    into '/', {
        from compileJava.destinationDir
        include 'com/myCompany/project/util/order/**',
                'com/myCompany/project/event/**',
    }
}

и я хотел бы переместить все классы из com / myCompany / project / event / ** в com / myCompany / relocated / project / event / ** (чтобы некоторые приложения использовали мой jar и имели com.myCompany.project Определенный пакет .event позволит избежать возможных конфликтов)

Я обнаружил, что это можно сделать с помощью плагина shadow, и попытался добавить

relocate 'com.myCompany.project.event.', 'com.myCompany.relocated.project.event.'

под этой задачей, но, похоже, она не работает. Кто-нибудь знает, где я должен добавить эту строку?

1 Ответ

0 голосов
/ 25 мая 2019

Вы можете добиться этого, добавив плагин ниже к вашему build.gradle

apply plugin: 'com.github.johnrengelman.shadow'

После добавления этого плагина добавьте следующий код в файл build.gradle

shadowJar {
    relocate 'com.myCompany.project.event', 'com.myCompany.relocated.project.event'
}

После добавления этого, чтобы убедиться, что ваша задача ShadowJar выполняется перед сборкой, добавьте эту строку в конце

assemble.dependsOn shadowJar

Это обеспечит запуск задачи теневого кувшина перед сборкой / сборкой во время сборки gradle.

При выполнении сборки Gradle вы должны увидеть, как все ваши пакеты и соответствующие им зависимости перемещены из com.myCompany.project.event в com.myCompany.relocated.project.event.

Для получения дополнительной информации вы можете обратиться к ShadowJarUserGuide

...