2016-11-10 41 views
4

我正在使用maven for Eclipse来构建一个将在远程服务器上运行的jar。我的系统运行OS X,服务器运行的是CestOS。 对于我需要的项目tensorflow library。 Maven成功地解决了依赖问题,所以我能够在本地运行项目。但是,在服务器上,我得到的错误是tensorflow库不存在,因为默认情况下,maven只包含macosx版本。如何强制maven在构建期间通过linux版本替换macosx版本的tensorflow?如何用特定操作系统的maven构建jar?

针对不同平台的TensorFlow java库可以找到here

P.S.我已经尝试在系统范围指向jar的情况下在pom中添加一个依赖项。

+1

你尝试考虑Maven的配置文件? –

+0

是的,我试图用配置文件,但我只能找到有关如何激活基于特定配置文件的信息在当前的OS上。我无法找到如何创建配置文件来为其他操作系统构建一个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位的。

当然,使用配置文件定义条件依赖关系会很好。

0

根据您链接的页面上的jar名称判断,MacOs和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> 

而且elsewere删除所有相关<dependency>节点在POM (所以如果没有<profiles>部分,将不存在对于tensorflow的依赖)。

这一变化后,您就一定要每次都指定一个配置文件(如会出现在POM没有tensorflow依赖):在MacOS mvn clean package -Pmacos准备包装时,并在CentOS mvn clean package -Plinux

准备包装时Eclipse允许您设置Project properties>Maven下的主动配置文件的列表(你可以得到这个窗口通过在Project explorer项目文件夹右键点击。

相关问题