gpt4 book ai didi

gradle - 仅使用必需平台的二进制文件构建jar(javacpp)

转载 作者:行者123 更新时间:2023-12-03 05:04:28 24 4
gpt4 key购买 nike

我想为tesseract建立一个胖子 jar 。通过以下构 build 置,我得到了一个约68 MB的jar,带有所有受支持平台的依赖项:

dependencies {
implementation group: 'org.bytedeco', name: 'tesseract-platform', version: '4.1.1-1.5.3'
}
jar {
manifest { attributes 'Main-Class': 'BasicExample' }
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}

为了减小此大小,我尝试仅在 this guideline之后包含平台的依赖项-但没有成功,请参见 SO question和@Samuel Audet对此的回答(我想坚持一下gradle)。因此,我决定手动仅包含 the POM file所需的依赖项:
dependencies {
implementation group: 'org.bytedeco', name: 'tesseract', version: '4.1.1-1.5.3'
implementation group: 'org.bytedeco', name: 'tesseract', version: '4.1.1-1.5.3', classifier: 'windows-x86_64'
implementation group: 'org.bytedeco', name: 'leptonica', version: '1.79.0-1.5.3', classifier: 'windows-x86_64'
}

这样可以将jar的大小减小到大约7 MB,并且可以正常工作(至少对于 basic example而言)。但是我得到警告:
Warning: Could not load ...: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path: ...

比较这两个jar时,我发现小jar缺少 lib路径以及所有 so库以及 header ,cmake和pkgconfig文件,并且我认为这是发出警告的原因。

所以我的问题是:
  • 如果显然不需要这些文件来运行jar,为什么要正常包含它们?
  • 如何在保持 jar 尺寸小的同时防止这些警告?

  • 当然,也欢迎采用其他任何方式构建仅具有一个平台所需依赖项的jar。

    最佳答案

    我需要对指南进行一些更新,感谢您的举报!现在,我们还需要javacpp-platform,在这种情况下,它可以为windows-x86_64提供类似的信息:

    dependencies {
    implementation group: 'org.bytedeco', name: 'tesseract', version: '4.1.1-1.5.3'
    implementation group: 'org.bytedeco', name: 'tesseract', version: '4.1.1-1.5.3', classifier: 'windows-x86_64'
    implementation group: 'org.bytedeco', name: 'leptonica', version: '1.79.0-1.5.3', classifier: 'windows-x86_64'
    implementation group: 'org.bytedeco', name: 'javacpp', version: '1.5.3', classifier: 'windows-x86_64'
    }
    需要解决此问题,以解决加载时的某些问题,如本问题所述:
    https://github.com/bytedeco/javacv/issues/1305
    更新:现在可以使用 Gradle JavaCPP通过以下方式更轻松地执行此操作:
    plugins {
    id 'java-library'
    id 'org.bytedeco.gradle-javacpp-platform' version "$javacppVersion"
    }

    // We can set this on the command line too this way: -PjavacppPlatform=linux-x86_64,macosx-x86_64,windows-x86_64,etc
    ext {
    javacppPlatform = 'linux-x86_64,macosx-x86_64,windows-x86_64,etc' // defaults to Loader.getPlatform()
    }

    dependencies {
    api "org.bytedeco:tesseract-platform:$tesseractVersion"
    }

    关于gradle - 仅使用必需平台的二进制文件构建jar(javacpp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61819636/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com