我有一个使用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.library.path
和我的输出JAR文件中。有什么想法吗?
在你的根项目中尝试:
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项