【发布时间】:2019-08-24 00:02:06
【问题描述】:
我的产品正在使用名为 matlab 控制版本 4.1.0 的第三方依赖项。这个 jar 文件允许 java 向 matlab 发送命令。
我们使用它的方式是在matlab中调用一个java命令(由用户触发),这会在java插件中执行一堆计算,然后java向matlab发送一个通知,然后开始执行m代码并接收到数据来自java。
至此,jar文件保存在我们的仓库中,直接在matlab中加载。
我们想要迁移到 maven 上的 matlab-control v5.0.0。所以我们认为是时候摆脱 jar 文件,将其作为来自 maven 的依赖项包含在我们的 gradle 构建中。
但是,api 似乎对 Matlab 不可见,它返回异常“找不到类 org.n52.matlabcontrol.MatlabProxy”。
如果我直接从 java 测试连接(通过创建 java 测试),java 将自行启动 matlab 并请求执行命令(例如,hello world 命令)。它工作正常,然后我可以实例化一个 MatlabProxy。但是如果我启动 Matlab 并尝试直接从中访问 MatlabProxy,它就找不到它。
因此,我的 gradle 构建似乎没有公开 Matlab-control API。到目前为止,我已经尝试了以下方法:
apply plugin: 'java-library'
dependencies {
implementation('org.n52.matlab:matlab-control:5.0.0')
api('org.n52.matlab:matlab-control:5.0.0')
}
但它不起作用,所以我错过了什么?
【问题讨论】:
-
首先不要同时使用实现和api。您的
build.gradle在 4.1.0 和 5.0.0 版本之间发生了什么变化? -
在 4.1.0 中,jar 文件在我的磁盘上,使用 compile FileTree 引用到 gradle,然后使用 javaaddpath 直接添加到 matlab。在 5.0.0 gradle 中,从 maven 中检索 jar,因此没有要添加到 matlab 中的 jar 文件。
-
所以没有 jar 文件可以添加到 matlab 中:为什么?如果matlab需要jar文件,就需要jar文件。 jar 文件来自本地磁盘还是来自 Maven 并不会改变这一点。
-
公共api不应该集成在gradle生成的jar文件中?
-
不,不应该这样。
标签: java maven gradle dependencies