当前位置: 首页 > 知识库问答 >
问题:

在JAR文件和运行时库路径中包含子项目gradle构建输出

慕容品
2023-03-14

我有一个使用JNI的Java应用程序,我正在使用gradle构建C共享库,其中包含我作为JNI的一部分加载的代码。C构建是根构建的一个子项目。我可以从根项目的运行jar任务中依赖:jnisubproject:assemblererelease,它确实构建了共享库(位于jnisubproject/build/lib/main/release/libjnisubproject.so),但它不会将共享库添加到我的jar文件中,也不会设置Java库路径,以便在运行时访问共享对象。通过一些黑客操作(在我的运行任务中显式修改java.library.path系统属性),我可以在使用gradle run时让它工作,但我希望能够构建一个JAR文件进行重新分发。

我尝试通过添加

dependencies {
    runtime project(":jnisubproject")
    // runtime ":jnisubproject:assembleRelease" also doesn't work
}

但这既不足以让gradle jar构建子项目,也不足以将其文件包含在jar中;这实际上似乎没有什么作用。如果我在JAR任务中添加一个显式依赖项,如下所示:

jar {
    dependsOn ":jnisubproject:assembleRelease"
}

当我运行gradle jar时,它将构建我的子项目,但毫不奇怪,共享库最终不会出现在JAR中。我尝试的最后一件事是上面带有显式依赖关系的片段,以及在输出目录上添加文件依赖关系:

dependencies {
    runtime files('jnisubproject/build/lib/main/release/*')    
}

但这两种感觉都非常刺耳,而且都不起作用,这是一个很棒的组合。如果我通过

jar {
    include 'jnisubproject/build/lib/main/release/*'
}

然后我的JAR文件除了清单之外就完全是空的了。

简而言之,我的问题是:

  • 我有一个构建共享库的子项目
  • 我希望根项目(Java项目)表达对共享库的依赖。
  • 我希望这个依赖导致共享库被添加到java.library.path和我的输出JAR文件中。

有什么想法吗?

共有1个答案

居飞扬
2023-03-14

在你的根项目中尝试:

processResources {
    from project(':jnisubproject').buildDir + '/lib/main/release/*'
}

它将告诉主进程资源任务包含您的lib。

关于java。图书馆路径此外,我认为不可能从Jar内部直接链接库。这里有更多信息。

 类似资料:
  • 我想在构建时将salesforce的Enterprise.jar文件包含在我的项目中,使用gradle,有没有人可以帮助我在项目中包含src/main/resources文件夹中存在的本地jar文件。

  • 我试图在我的“Java”gradle项目中包含一个本地jar文件。我已经在Project的“main/resource”文件夹中添加了jar文件。在Build.Gradle中添加了以下行:-

  • 我在eclipse中有一个java项目,我在ec利pse之外使用ivy依赖项管理器,所以我的目录结构中充满了各种jar文件。有没有一种简单的方法将我的eclipse项目的路径指向常春藤目录并拾取所有jar文件? 我试图避免将每个单独的jar拉到我的eclipse项目目录中,并希望有更好的方法。

  • 问题内容: 我想在构建时使用gradle在我的项目中包含salesforce的enterprise.jar文件。有人可以帮助我如何在项目的src / main / resources文件夹中包含一个本地jar文件。 问题答案: 文档中对此进行了说明。应该执行以下操作: 我不会把罐子放进去。它不是项目的资源,而是编译依赖项。我会将其放在lib目录中。

  • 我有一个多项目的设置,在这里我想从某些子项目构建Rpm文件,包含其他子项目的人工制品。看来我需要一些基本的基础知识。 项目布局如下: 这两个服务都依赖于CommonLibs。 我使用的是Nebula.os-Package 2.0.2和Gradle2.2快照版本。 null 所以,我想我应该在serviceA和ServiceB的中做这样的事情: 显然,这是行不通的: 好的,serviceA不是一个J

  • 我的项目中有以下设置... 用于SOA风格项目的多项目gradle构建,使用Rabbitmq和Spring集成连接在一起。 包含许多grails项目以及表示服务的普通java/groovy项目。 每个服务项目旁边都有一个项目(jar),其中包含可以使用Spring集成代理的服务的所有公共接口(和消息)。 这些项目使用gradle依赖关系相互关联,然后我使用gradle想法插件生成IntelliJ项