注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

maven 只复制compile级别的jar包  

2013-09-03 16:02:13|  分类: 项目管理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      mvn dependency:copy-dependencies可以准备好当前项目依赖的jar包,可以配置文件中scope为test的jar也包含进来了。生产系统发布的时候是不需要测试用的jar包的,如junit相关的包。想直接使用命令来指定copy的jar包的scope,可是貌似maven命令中没有提供这样的方式,网上也没找到例子。需要在pom.xml文件中做配置,配置参数在这里
在profile里面配置
<profile>
<id>compile-jar</id>
<build>
<plugins>
<plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-dependency-plugin</artifactId>
             <version>2.8</version>
             
             <configuration>
              <outputDirectory>${lib.dir}</outputDirectory>
              <includeScope>compile</includeScope>
             </configuration>
         </plugin>
</plugins>
</build>
</profile>
通过-P参数来激活
mvn dependency:copy-dependencies -P compile-jar
这样就可以只copy compile级别的jar包了。

      一开始把configuration配到了executions的内部,这样不生效。configuration要与executions同级,其内部的includeScope这样的属性才有效。
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${endorsed.dir}</outputDirectory>
                <silent>true</silent>
                <excludeScope>test</excludeScope>
                <excludeArtifactIds>junit,dbunit,mockito-all</excludeArtifactIds>
                <excludeTransitive>true</excludeTransitive>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax</groupId>
                        <artifactId>javaee-endorsed-api</artifactId>
                        <version>6.0</version>
                        <type>jar</type>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>

      不配置直接使用命令行是这样
mvn dependency:copy-dependencies -DincludeScope=compile

不过compile scope还有问题,比如
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
这时provided级别的jar包也会复制过去,有的时候会出错。比如javaee-web-api的jar包部署到weblogic中,会报找不到jsf相关的jar包找不到的错误,部署不成功(tomcat不会)。所以运行的项目使用runtime的scope才合适。具体各个scope的含义,插件官网有说明:
runtime : scope gives runtime and compile dependencies,
compile : scope gives compile, provided, and system dependencies,
test (default) : scope gives all dependencies,
provided : scope just gives provided dependencies,
system : scope just gives system dependencies.
      上面所举的例子中,有个参数<excludeTransitive>true</excludeTransitive>,默认是false。如果是true则只复制pom文件中定义了的jar,这样一般不符合需求,所以一般不用配置excludeTransitive参数。profile这种方式也不是必须的,configuration要与executions同级,则像下面这样配置也行
<plugin>
<configuration>
        <excludeScope>provided</excludeScope>
        <excludeArtifactIds>junit,dbunit,mockito-all</excludeArtifactIds>
        <excludeTransitive>false</excludeTransitive>
        <includeScope>runtime</includeScope>
    </configuration>
    <executions>
    ......
    </executions>
</plugin>
各个参数的详细含义见:
http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html
  评论这张
 
阅读(7815)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017