在 Gradle 中禁用静态库构建

Disabling static library build in Gradle

本文关键字:静态 构建 Gradle      更新时间:2023-10-16

我正在使用 gradle 为我们的 java 项目构建一个 JNI 库,它工作正常,但我似乎无法弄清楚如何阻止 gradle 构建文件的共享和静态版本。我想禁用静态库的构建以加快构建过程。添加"共享"标签似乎不起作用。

从 gradle 构建文件中:

libraries {
  bulletjme {
      shared
  }
}

gradle手册指出:"例如,当你定义一个名为helloworld的库并在Linux上构建时,默认情况下,Gradle将生成 libhelloworld.so 和libhelloworld.a二进制文件。但是,它没有说明如何禁用任一二进制文件的构建。

感谢您的任何回答!

在 Gradle 2.11 中,这可以通过将可构建属性设置为 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
            }
        }
    }
}

为了防止 gradle 为"main"组件构建静态库,您需要在 build.gradle 中具有以下代码:

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