2010-10-12 35 views
0

Maven的工作,我想要做的構建與包裝,我想補充的依賴與範圍系統,並與specifing的Systempath下像後續的jar在耳加入罐子(示波器系統依賴)建立

<dependency> 
    <groupId>group1</groupId> 
    <artifactId>group1</artifactId> 
    <version>1</version> 
    <scope>system</scope> 
    <systemPath>D:\Buildear\Jars\file.jar</systemPath> 
</dependency> 

但我不發現我的耳朵generater罐子!

請幫忙。

回答

3

我和Maven一起工作,我想用包裝耳做一個構建,我想添加一個範圍爲system(...)的依賴關係。但我沒有在我的發聲耳朵裏找到這個罐子!

是的,這只是你當用這應該是始終定義可用一個system範圍依賴(AB)。我在這個previous answer寫了很多次這一點,例如說我引用如下:

我已經寫manymanyreallymany次關於這個 這裏SO和在99%的情況, system範圍依賴關係應該是 避免。我會重複一下 Dependency Scopes微型導軌說 一次:

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

所以,而是採用了system 範圍,或者:

  • 通過install:install-file添加您的庫到你的本地倉庫。 這是一個快速和骯髒的方式來獲得 東西的工作,如果你獨自它可能是一種選擇,但 它使你的 構建非便攜。
  • 安裝並運行像Nexus,Archiva或 Artifactory的「企業存儲庫」,並通過 deploy:deploy-file添加庫。這是 理想的方案。
  • 設置爲this previous answer 描述的,把你的圖書館有一個基於文件的存儲庫。這 是最好妥協,如果你 沒有公司存儲庫,但 需要作爲一個團隊工作,並不希望 犧牲可移植性。

請停止使用system範圍。

+0

好吧,我明白了,所以我將使用install:install-file,我的問題是我有很多依賴,需要很多時間才能安裝,然後在pom中添加依賴關係。謝謝。 – Rayouma 2010-10-12 13:38:01

0
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<parent> 
    <artifactId>aaa</artifactId> 
    <groupId>aaa</groupId> 
    <version>1.0</version> 
</parent> 

<groupId>aaa</groupId> 
<artifactId>aaa</artifactId> 
<version></version> 

<packaging>ear</packaging> 
<name>aaa - Ear</name> 
<dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>aaa-ejb</artifactId> 
     <version>${project.version}</version> 
     <type>ejb</type> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>aaa-webapp</artifactId> 
     <version>${project.version}</version> 
     <type>war</type> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>jboss</groupId> 
     <artifactId>jboss-common</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>jboss</groupId> 
     <artifactId>jbosssx</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>${aaa.name}-${project.version}</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-ear-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <generateApplicationXml>false</generateApplicationXml> 
       <defaultLibBundleDir>lib</defaultLibBundleDir> 
       <modules> 
        <ejbModule> 
         <groupId>${project.groupId}</groupId> 
         <artifactId>aaa-ejb</artifactId> 
        </ejbModule> 
        <jarModule> 
         <groupId>xml-apis</groupId> 
         <artifactId>xml-apis</artifactId> 
         <excluded>true</excluded> 
        </jarModule> 
       </modules> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<properties> 
    <aaa.name>aaa-batch</aaa.name> 
</properties> 

這將創建一個耳朵和複製圖書館在耳lib文件夾。

+0

是的,但我想補充的依賴,並指定JAR的路徑和我發現,specifing罐子的範圍應該是系統的路徑!我希望與範圍系統的罐子將被複制在我生成的耳朵! – Rayouma 2010-10-12 11:30:42

+0

還請,有一個隱藏的構建與包裝類的「耳朵」後的jar的版本,例如,如果我使用JUnit版本5我想名爲JUnit和不帶版本中得到它在我耳邊的方式名字! – Rayouma 2010-10-12 11:32:23