Как уберечь ОСОБЫЕ зависимости?

Типичный ответ для uberjar - следующий код:

build.gradle для проекта

manifest {
    attributes("Main-Class": "main.Main" )
}
jar{

    //<editor-fold defaultstate="collapsed" desc="uberjar">
//uberjar start
    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
//uberjar end
    //</editor-fold>
}

Из того, что я наблюдаю, это работает, помещая все банки в maven local.

Как я могу сделать так, чтобы uberjar были ТОЛЬКО зависимости, или только зависимости, которые я выбрал?

1 ответ

Вы можете использовать конфигурацию include или exclude (или то и другое, если это соответствует вашим потребностям), чтобы указать, какие пакеты вы хотите использовать в своем Uberjar.

Пример:

task customJar(type: Jar) {
   .....
   exclude('com/somePack/excludePack1/**') 
   exclude('com/somePack/excludePack2/**') 

   include('com/somePack/**')

    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}
// this example will include only packages with com/somePack/
// since exclude configuration specifies com/somePack/excludePack1/ and 
// com/somePack/excludePack2/ packages to be excluded. 
// any other packages under com/somePack/ will be included in the jar.

Если вы используете метод include, он будет содержать только те пакеты, которые соответствуют определениям.

Если вы используете исключение, оно не будет содержать никаких пакетов, которые исключают определения.

Вы можете исключить свои собственные исходные коды, как это. Я предлагаю создать пользовательскую задачу jar и выполнить эту задачу для такого рода вещей. (Например: gradle yourJarTaskName)

Другие вопросы по тегам