2010-11-23 99 views
3

我在我的項目中使用外部私有的jar。當我在我的pom.xml如下硬編碼的路徑,它工作正常:

<dependency> 
    <groupId>com.foo.bar</groupId> 
    <artifactId>bar</artifactId> 
    <version>5.2</version> 
    <scope>system</scope> 
    <type>jar</type> 
    <systemPath>D:\workspace\myproj\external\companyname\lib\proprietary_api.jar</systemPath> 
</dependency> 

然而,當我嘗試使用$ {BASEDIR}變量,行家找不到罐子:

<dependency> 
    <groupId>com.foo.bar</groupId> 
    <artifactId>bar</artifactId> 
    <version>5.2</version> 
    <scope>system</scope> 
    <type>jar</type> 
    <systemPath>${basedir}\external\companyname\lib\proprietary_api.jar</systemPath> 
</dependency> 

聚甲醛位於d:\工作區\的Myproj

這也必須是跨平臺兼容(在Windows上開發,部署在Linux上)。

謝謝!

回答

3

我不確定這會有幫助,但嘗試使用forward(/)而不是後向(\)斜線。另外,嘗試使用mvn -emvn -X(後者將產生lot調試行)運行它 - 這可能會幫助您找出問題所在。

下面是一個例子:

你想要以同樣的方式使用 ${basedir}

順便說一句,你爲什麼不mvn install:install-file依賴而不是使用systemPath?請參閱:

4

這是錯誤的使用範圍的系統爲您專有的JAR文件。您應該將其部署或安裝到本地/中央存儲庫中。

0
  1. 在路徑中使用正斜槓。

  2. $ {basedir}佔位符是每個Maven運行的外推一次。如果這個項目不是您項目層次結構中最頂層的項目,那麼$ {basedir}將被推斷爲最頂端項目(即Maven開始的項目)的位置,而不是當前項目。

0

爲了使它在Windows和Linux上都能正常工作,您必須開始使用配置文件。這樣,一個特定的配置文件將基於操作系統啓動,並且構建將變得可移植。

在每個配置文件中,您可以定義一個名爲jarPath的屬性(僅作爲示例),並在您的依賴項中引用該屬性。

Maven Profiles Introduction

將眼睛輪廓的OS標籤和配置標籤。確保您的構建始終是可移植的,並且需要完成更少的手動步驟。

3

爲了實現跨平臺兼容,請使用$ {file.separator}而不是斜槓。 這樣就會自動轉換成OS指定格式