Отключение статической сборки библиотеки в Gradle

Я использую gradle для создания библиотеки JNI для нашего java-проекта, и она отлично работает, однако я не могу понять, как не дать gradle создавать как общие, так и статические версии файла. Я бы хотел отключить сборку статической библиотеки, чтобы ускорить процесс сборки. Добавление тега «shared», похоже, не помогает.

Из файла сборки Gradle:

libraries {
bulletjme {
shared
}
}

Руководство gradle гласит: «Например, когда вы определяете библиотеку с именем helloworld и строите ее на Linux, Gradle по умолчанию создаст двоичные файлы libhelloworld.so и libhelloworld.a». Однако здесь не сказано, как отключить сборку любого из двоичных файлов.

Спасибо за любые ответы!

2

Решение

В Gradle 2.11 это можно настроить, установив для свойства buildable значение false. Хотя в документации сказано, что это только для чтения, на самом деле это работает.

model {
components {
library(NativeLibrarySpec) {
binaries.withType(StaticLibraryBinarySpec) {
buildable = false
}
}
}
}

При проверке вывода компонентов Gradle теперь скажет, что библиотека отключена пользователем:

$ gradle components
...
Binaries
Shared library 'library:sharedLibrary'
build using task: :librarySharedLibrary
build type: build type 'debug'
flavor: flavor 'default'
target platform: platform 'linux_x86-64'
tool chain: Tool chain 'gcc' (GNU GCC)
shared library file: build/libs/library/shared/liblibrary.so
Static library 'library:staticLibrary' (not buildable)
build using task: :libraryStaticLibrary
build type: build type 'debug'
flavor: flavor 'default'
target platform: platform 'linux_x86-64'
tool chain: Tool chain 'gcc' (GNU GCC)
static library file: build/libs/library/static/liblibrary.a
Disabled by user

Это также может быть обработано глобально для всех библиотек одновременно:

model {
components {
libraryA(NativeLibrarySpec)
libraryB(NativeLibrarySpec)
all {
binaries.withType(StaticLibraryBinarySpec) {
buildable = false
}
}
}
}
2

Другие решения

Чтобы не допустить сборки статических библиотек для «основного» компонента, вам необходимо иметь следующий код в build.gradle:

model {
components {
main(NativeLibrarySpec) {
sources {
c {
binaries.withType(StaticLibraryBinarySpec) { bin ->
binaries.remove(bin)
}
}
}
}
}
}
0

По вопросам рекламы [email protected]