2010-08-16 130 views
10

是否有可能在pom中定義依賴關係,使其具有系統範圍但指向多個罐子?Maven:指向多個罐子的系統依賴關係

我確定這是非常不正統的,但是,我只是想知道這是否可能。因此,像:

<dependency> 
    <groupId>foo</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/lib/foo/*.jar</systemPath> 
</dependency> 

回答

7

首先(我永遠不會再說一遍就夠了),使用system範圍的依賴關係是除非你確切地知道你在做什麼,否則不鼓勵。從Dependency Scopes

系統:這種關係需要在你的 項目生命週期的某些階段,但 系統特定的。 使用此範圍 是不鼓勵:這被認爲是 「先進」之類的功能,應該 當你真正瞭解 所有其使用的後果, 它是非常難,如果不 實際上不可能只使用量化。 此範圍的定義使您的 構建不可移植。在某些邊緣情況下可能需要 。系統範圍包括 <systemPath>元素,該元素指向 這個 依賴於本地機器的物理位置。它是 因此用於指某些工件 預計將出現在給定的 本地機器不在存儲庫中; ,其路徑可能不同 機器對機器。例如,systemPath 元素可以參考其路徑中的變量:${JAVA_HOME}

現在,要嚴格回答你的問題,宣告了system範圍,將點上幾罐的依賴是「可能」 IF的依賴有MANIFEST.MF列出其他JAR相對其Class-Path條目。像這樣(假設「根」的依賴是lib):

Class-Path: ../lib/bar.jar ../lib/foo.jar 

,但我不推薦這種方法,尤其是在你的具體情況。相反,看看這個previous answer,我介紹如何設置一個基於文件的存儲庫。

3

我從來沒有這樣做,但根據Maven的核心概念,我想是因爲每一個神器是由一個單一的實體(罐,拉鍊,焦油等爲代表它可能無法。)。因此可能不可能有多個罐子代表一個人工製品。

更多system scope依賴關係假定始終可用並且不在回購中查找。這些應該僅限於JVM或JDK相關的依賴關係(現在由JDK提供的,但前面是可單獨下載)

8

據我所知,您正在尋找一種簡單的方法來管理本地jar文件(位於您的案例的'$ {basedir}/lib/foo /'文件夾中)。 使用addjars-maven-plugin很簡單。只需添加以下聲明到您的POM:

<plugin> 
    <groupId>com.googlecode.addjars-maven-plugin</groupId> 
    <artifactId>addjars-maven-plugin</artifactId> 
    <version>1.0.2</version> 
    <executions> 
    <execution> 
     <goals> 
      <goal>add-jars</goal> 
     </goals> 
     <configuration> 
      <resources> 
       <resource> 
        <directory>${basedir}/lib/foo</directory> 
       </resource> 
      </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+1

很酷的插件。謝謝 – ufk 2012-08-05 09:02:21

+2

addjars-maven-plugin需要Maven版本3.0。 – SKR 2012-09-25 06:45:03