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

如何在Gradle中为Netty和RXTX添加本地依赖项?

鲁英卫
2023-03-14

在我的应用程序中,我想与Arduino板进行一些通信。为了实现串行通信,我想使用Netty框架和RXTX传输库。

  • http://netty.io
  • https://mvnrepository.com/artifact/io.netty/netty-all/4.1.6.Final
  • https://mvnrepository.com/artifact/io.netty/netty-transport-rxtx/4.1.6.Final

因此,我在Gradle构建配置中添加了以下行:

dependencies {
  compile group: 'io.netty', name: 'netty-all', version: '4.1.5.Final'
  compile group: 'io.netty', name: 'netty-transport-rxtx', version: '4.1.5.Final'
  ...
}

现在,编译时依赖关系已经解决,我可以毫无错误地构建项目。

我的构建配置使用以下命令生成一个可执行JAR:

jar {
  manifest {
    attributes  'Main-Class': 'de.project.Main',
                'Implementation-Title': 'My Project',
                'Implementation-Version': version
  }
  from {
    configurations.compile.collect {
        it.isDirectory() ? it : zipTree(it)
    }
  }
}

但由于RXTX库使用本机库,因此在执行代码时会出现以下异常:

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
  at java.lang.Runtime.loadLibrary0(Runtime.java:870)
  at java.lang.System.loadLibrary(System.java:1122)
  at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
  at de.project.communication.SerialConnector.getSerialPorts(SerialConnector.java:83)
  at de.project.Main.main(Main.java:36)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:497)
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

异常告诉我,我需要RXTX的依赖于平台的本机库,如:

图书馆馆藏。jnilib(用于OSX)

所以我的问题是:在Gradle构建中添加本机库的最佳实践是什么?在IDE中运行我的项目时,我如何告诉IntelliJ也使用这些本机库?到目前为止,我还没有在网上找到任何令人满意的答案。

共有1个答案

阮炯
2023-03-14

我现在通过使用RXTX库的附加依赖项解决了这个问题:

  • https://mvnrepository.com/artifact/org.bidib.jbidib/jbidibc-rxtx-2.2/1.6.0

我添加了两个依赖项:

dependencies {
  compile group: 'io.netty', name: 'netty-all', version: '4.1.5.Final'
  compile group: 'io.netty', name: 'netty-transport-rxtx', version: '4.1.5.Final'

  // New dependencies:
  compile group: 'org.bidib.jbidib', name: 'jbidibc-rxtx-2.2', version: '1.6.0'
  compile group: 'org.bidib.jbidib', name: 'bidib-rxtx-binaries', version: '2.2'

  ...
}

jbidibc-rxtx-2.2库使用另一种加载机制,以便从bidib-rxtx-binary加载二进制文件。这就是为什么它现在有效。

因为“netty transport rxtx”已经提供了rxtx库作为依赖项,所以我添加了以下配置,以便在我的项目中只使用“新”rxtx库。

configurations {
  all*.exclude group: 'org.rxtx'
}
 类似资料:
  • 问题内容: 我想使用Leiningen来构建和开发Clojure项目。有没有办法修改project.clj告诉它从本地目录中选择一些jar? 我有一些专有的jar,无法上传到公共存储库。 另外,可以使用leiningen维护clojure项目的“ lib”目录吗?如果我的一堆clojure项目共享相同的jar,我不想为每个jar保留一个单独的副本。 谢谢 问题答案: 你可以将你的私人jar放进去,

  • 本文向大家介绍gradle 添加本地JAR文件依赖性,包括了gradle 添加本地JAR文件依赖性的使用技巧和注意事项,需要的朋友参考一下 示例 单罐 有时您需要添加本地JAR文件作为对Gradle构建的依赖。这是您可以执行的操作: path文件系统上的目录路径在哪里,是local_dependency.jar本地JAR文件的名称。该path可以相对于构建文件。 JAR目录 也可以添加一个jar目

  • 本文向大家介绍android-gradle 如何添加依赖项,包括了android-gradle 如何添加依赖项的使用技巧和注意事项,需要的朋友参考一下 示例 下面的示例描述了如何在app /模块的build.gradle文件中声明三种不同类型的直接依赖关系:            

  • 本文向大家介绍gradle 添加依赖,包括了gradle 添加依赖的使用技巧和注意事项,需要的朋友参考一下 示例 Gradle中的依赖项遵循与Maven相同的格式。依赖关系的结构如下: 这是一个例子: 要添加为编译时依赖项,只需dependency在Gradle构建文件的代码块中添加以下行: 为此的另一种语法可以显式地命名依赖项的每个组件,如下所示: 这在编译时增加了依赖性。 您也可以仅为测试添加

  • 本文向大家介绍android-gradle 如何在模块中添加.aar依赖项?,包括了android-gradle 如何在模块中添加.aar依赖项?的使用技巧和注意事项,需要的朋友参考一下 示例 在需要aar文件的模块(库或应用程序)中,必须将其添加build.gradle到存储库中: 并添加依赖项: 请注意模块中正在使用的libs文件夹的相对路径。

  • 显然,出于某种原因,Gradle 似乎认为我的“Spring数据”依赖于 slf4j。这是 gradle 打印出来的依赖关系图 尽管spring data commons实际上并不依赖于slf4j:http://mvnrepository.com/artifact/org.springframework.data/spring-data-commons/1.5.1.RELEASE 为什么gradl