在Ear构建中添加jar(与范围系统的依赖关系)

时间:2010-10-12 10:36:00

标签: maven-2

我使用 Maven ,我想用包装 ear 进行构建,我想添加范围系统的依赖关系指定jar的 systemPath ,如下所示:

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

但我没有在我的耳朵里发现这个罐子!!!

请帮助。

2 个答案:

答案 0 :(得分:3)

  

我和Maven一起工作,我想用包装耳做一个构建,我想添加一个范围为system(...)的依赖项。但我没有在我的耳朵里找到那个罐子!!!

是的,这就是当(ab)使用system作用域依赖时所得到的结果,该依赖应该始终可用按照定义。我多次写过这篇文章,例如我在下面引用的previous answer

  

我已经写过manymany,   really many次   这里有SO和99%的情况,   system范围内的依赖关系应该是   避免。我会重复一下   Dependency Scopes迷你指南说   再来一次:

     
    
        
  • system :您的某些阶段需要此依赖关系     项目的生命周期,但是     系统专用。 使用此范围     气馁:这被认为是一个     “先进”的功能和应该     只有在你真正理解的时候才能使用     其使用的所有后果,     如果没有,这可能会非常困难     实际上无法量化。     根据定义,此范围呈现您的     构建非便携式。它可能是     某些边缘情况下必要的。该     系统范围包括     指向的<systemPath>元素     这个的实际位置     对本地机器的依赖。它是     因此用于指代一些神器     预计将出现在给定的     本地机器不在存储库中;     并且其路径可能会有所不同     机器到机器。 systemPath     元素可以指环境     路径中的变量:${JAVA_HOME}     例如。
  •     
  
     

所以,而不是使用system   范围,或者:

     
      
  • 通过install:install-file将您的库添加到本地存储库。   这是一种快速而肮脏的方式   工作的东西,它可能是一个选择   如果你是孤独的,但它会使你的   构建非便携式。
  •   
  • 安装并运行“企业存储库”,如Nexus,Archiva或   Artifactory并通过添加您的库   deploy:deploy-file。这是   理想情景。
  •   
  • 按照this previous answer中的说明设置基于文件的存储库   并把你的库放在那里。这个   如果你是最好的妥协   没有公司存储库但是   需要团队合作而不想要   牺牲便携性。
  •   
     

请停止使用system范围。

答案 1 :(得分: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文件夹中。