我正在使用maven for Eclipse来构建一个可以在远程服务器上运行的jar。我的系统正在运行OS X,服务器正在运行CestOS。 对于该项目,我需要tensorflow library。 Maven成功解析了依赖关系,因此我可以在本地运行该项目。但是,在服务器上我收到的错误是tensorflow库不存在,因为默认情况下maven仅包含macosx版本。如何在构建期间强制maven用linux版本替换macosx版本的tensorflow?
可以找到不同平台的TensorFlow java库here。
P.S。我已经尝试在pom中添加一个依赖项,系统范围指向jar。
答案 0 :(得分:0)
在你的POM中试试这个:
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tensorflow</artifactId>
<version>0.9.0-1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tensorflow</artifactId>
<version>0.9.0-1.2</version>
<classifier>linux-x86_64</classifier>
</dependency>
或linux-x86
,如果您的服务器是32位。
当然,使用配置文件定义条件依赖项会很不错。
答案 1 :(得分:0)
根据您链接的页面上的jar名称判断,MacO和Linux版本之间的区别在于jar名称version
部分之后的文本。
这称为classifier
(参见Maven coordinates),是一个可选坐标,在工件版本之后提供额外的区别。
正如nandsito已经建议的那样,为了扩展其答案,试试这个(未经测试,让我知道,我会更新):
<profiles>
<profile>
<id>osx</id>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tensorflow</artifactId>
<version>0.9.0-1.2</version>
<classifier>macosx-x86_64</classifier>
</dependency>
</profile>
<profile>
<id>linux</id>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tensorflow</artifactId>
<version>0.9.0-1.2</version>
<classifier>linux-x86_64</classifier>
</dependency>
</profile>
</profiles>
并删除POM中所有相关的<dependency>
个节点(这样,如果没有<profiles>
部分,就不会对tensorflow
有依赖。
在此更改之后,您必须每次都指定一个配置文件(因为POM中不存在tensorflow依赖关系):在MacOs mvn clean package -Pmacos
上准备包时以及在Centos上准备包时{{ 1}}
Eclipse允许您在mvn clean package -Plinux
&gt;下设置活动配置文件列表Project properties
(您可以通过右键单击Maven
中的项目文件夹来访问此窗口。
答案 2 :(得分:0)
我认为您必须设置一个构建系统,例如 Jenkins,并为每个目标环境/平台进行配置。在为 Linux 构建时,配置构建系统运行此命令 mvn clean package -Djavacpp.platform=linux-x86_64
,这里的关键是参数 -Djavacpp.platform
,根据您的目标平台进行更改。