2016-11-10 42 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項目文件夾右鍵點擊。

相關問題