`

maven 只复制compile级别的jar包

 
阅读更多

     

原博客:http://ljhzzyx.blog.163.com/blog/static/3838031220138335540882/

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
分享到:
评论

相关推荐

    maven打包 maven打jar包详细步骤

    本文将详细讲解如何使用Maven来打包一个Java项目,并创建JAR文件。 首先,Maven有三个主要生命周期阶段:`clean`、`default`(也称为`compile`)和`install`。每个阶段包含一系列的阶段(或者称为目标,如`compile`...

    Maven引入本地Jar包并打包进War包中的方法

    "Maven引入本地Jar包并打包进War包中的方法" Maven是一种流行的项目管理工具,主要用于Java项目的构建、测试和部署。在实际开发中,我们经常需要引入本地Jar包以满足项目的需求。本文将介绍Maven引入本地Jar包并...

    Maven 和Maven下载的jar包库

    本文将深入探讨Maven的核心概念、工作原理以及如何使用Maven下载的jar包库。 **1. Maven简介** Maven是由Apache软件基金会开发的一个项目管理工具,它基于项目对象模型(Project Object Model,POM)的理念,通过...

    maven的本地仓库jar包

    Maven的本地仓库是Maven系统的核心组件之一,它存储着项目所需的各类依赖库,包括JAR包。当你在开发过程中引用了一个库,Maven会尝试从中央仓库下载该库到本地仓库,以便后续的编译和构建步骤能够访问到。 本地仓库...

    Maven中主要jar包集合

    本文将深入探讨"Maven中主要jar包集合"这一主题,旨在帮助初学者理解Maven的工作原理以及如何利用它来高效地管理jar包。 首先,我们要明白什么是Maven。Maven是Apache软件基金会开发的一个项目管理和综合工具,主要...

    JxBrowser开发maven仓库jar包

    由于JxBrowser在maven仓库中可能不再可用,对于需要使用此库的开发者来说,直接下载jar包并将其部署到本地或私有Maven仓库是必要的步骤。 首先,我们需要理解Maven仓库的概念。Maven仓库是存储项目依赖的地方,分为...

    maven下载QRCode.jar包

    当你运行`mvn install`或`mvn compile`命令时,Maven会从中央仓库检索这个包,并将其放入本地仓库。如果Maven无法从中央仓库找到该依赖,你可能需要检查你的网络设置或联系库的开发者。 一旦`QRCode.jar`被成功下载...

    maven 自动下载jar包工具

    在描述中提到的“maven 自动下载jar包工具”,实际上就是指利用Maven的特性来自动化处理jar包的下载。在传统的Java开发中,开发者需要手动下载所需的jar包并添加到项目的类路径中。而Maven通过其配置文件pom.xml,...

    Maven 构建 Kettle 时所需的部分jar包

    本文将深入探讨Maven如何用于构建Kettle项目,并解析与之相关的jar包的重要性。 首先,Maven是一个广泛使用的Java项目管理工具,它提供了一种标准化的方式来管理和构建Java项目。Maven通过依赖管理和项目信息管理,...

    maven jar包下载地址

    Maven jar包是Maven的核心组件,包含了执行Maven命令所需的所有依赖和资源。这篇博客(链接已给出)可能介绍了如何找到并下载Maven的jar包。 首先,我们来理解Maven的基本概念。Maven是一个项目管理和综合工具,它...

    maven仓库 jar包

    在Java开发中,Maven仓库是一个至关重要的组成部分,它存储了大量的jar包,这些包包含了各种预编译的类和库,使得开发者无需从零开始构建项目。Maven仓库分为本地仓库、中央仓库和远程仓库,其中"maven-repository...

    maven-JAR包

    当 Maven 构建项目时,它会从预设的 Maven 仓库(如 Maven Central Repository)中查找并下载这些依赖的 JAR 包,确保项目的运行环境完整。 **构建生命周期** Maven 的构建生命周期包括三个阶段:Clean、Default ...

    maven项目编译jar包

    Maven提供了内置的目标来构建JAR包。最常用的是`package`目标,它会编译源代码,运行测试,并打包成可部署的形式。在命令行中,你可以输入以下命令来执行这个目标: ``` mvn package ``` 4. **配置JAR插件**: ...

    maven本地仓库jar包

    "maven本地仓库jar包"指的是在Maven项目中使用的各种库文件,以.jar格式存储在用户的本地仓库中。本地仓库是Maven系统的一个重要组成部分,它缓存了从远程仓库下载的依赖,以便于重复使用和快速构建。 Maven使用一...

    Maven核心程序jar包

    ** Maven核心程序jar包详解 ** Maven是Java开发中的一个关键工具,它是一个项目管理和综合工具,由Apache Software Foundation维护。Maven的核心程序jar包是实现自动化构建、依赖管理和项目信息管理的基础。在给定...

    导出maven项目依赖的jar包(图文教程)

    这将将 Maven 项目依赖的 jar 包导出到 lib 目录中,并且只包括 compile 级别的依赖项。 结论 通过这篇教程,我们学习了如何将 Maven 项目依赖的 jar 包导出到指定目录中。这些方法可以帮助我们更好地管理项目依赖...

    Java+IDEA+maven混淆打包

    在IDEA中,可以通过点击“Maven”面板,找到对应的生命周期阶段(如`clean`, `compile`, `package`),或者在命令行中执行`mvn clean package`来完成打包混淆的整个流程。 4. **验证混淆结果**: 打包完成后,...

    maven-archetype-quickstart-1.1.jar包下载

    `maven-archetype-quickstart-1.1.jar` 是一个Maven的快速启动 archetype 包,专门用于帮助开发者快速创建一个新的Maven项目结构。在这个压缩包中,你将找到一个预设的Java项目模板,以便于你能够迅速地开始编码。 ...

    maven打jar包

    【标题】"maven打jar包" 在Java开发中,Maven是一款强大的项目管理工具,它可以帮助开发者构建、管理和部署项目。"maven打jar包"是指使用Maven来打包Java应用程序,将其编译后的类文件和相关资源打包成一个可执行的...

    maven+springboot打成jar包的方法

    Maven+SpringBoot打成JAR包的方法 Maven是Apache软件基金会的一个开源项目,主要用于Java项目的自动化build、测试、打包、部署等过程。SpringBoot是一个基于Java的框架,用于快速构建生产级别的应用程序。本文将...

Global site tag (gtag.js) - Google Analytics