2012-08-22 66 views
0

如何在編譯階段之前運行mvn install:install-file的等效項。我們有一個lib/foo-1.0.0.jar下的文件,這個文件不在Maven倉庫中。因此,我們使用mvn install:install-file手動安裝它,並在編譯階段將其作爲依賴項。但是,如果該文件未安裝在本地存儲庫中,則會因編譯錯誤而失敗。如何指導行家安裝此自動在編譯之前如何在編譯前運行等效的mvn install:install-file

+0

安裝此文件?這個jar在版本控制下保存在你的項目中? – Ilya

+0

是它在版本控制下 – priya

回答

2

使用系統的依賴性範圍

<dependency> 
    <groupId>com.company.groupId</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0.0</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/lib/foo-1.0.0.jar</systemPath> 
</dependency> 

${basedir} - 是您pom.xml
編輯的DIR
也可以使用build-helper-maven-plugin

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
       <artifact> 
        <file>${basedir}/lib/foo-1.0.0.jar</file> 
        <type>jar</type> 
        <classifier>optional</classifier> 
       </artifact> 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
+0

這會起作用,但這是一件非常不尋常的事情。通常最好堅持每個模塊的單個產品約定。設置Nexus回購非常簡單。 – artbristol

+1

@artbristol設置nexus存儲庫會增加設置的複雜性。這種方法允許任何人簽出項目並運行「mvn clean install」而不必先閱讀說明。 –

+0

@ThorbjørnRavnAndersen我同意,能夠毫不費力地進行乾淨安裝非常重要。你可以在pom的'repositories'部分指定nexus repo嗎? – artbristol

1

安裝一個公司範圍的Maven代理,如Nexus,一個d把神器放在那裏。每個開發者都需要改變其settings.xml以指向該代理。將jar版本控制到版本控制通常是一個糟糕的主意,特別是如果你想轉向分佈式SCM。