zoukankan      html  css  js  c++  java
  • Maven项目打Jar包,如何添加依赖

      之前介绍了使用spring-boot-maven-plugin插件打jar包,会把所有的依赖文件都导入,然后变成了一个可执行的jar包。这样的不好的地方就是,我实际上并不需要把依赖的jar包也打入到生成的jar包里面去,仅仅需要把当前项目的代码打包。生成的jar包只要能引用到它所依赖的jar包,并且可以执行就好了。

      那么一般情况下,打包时如何添加依赖呢?
      使用maven-dependency-plugin插件
      子项目中的pom.xml文件中,添加以下maven-dependency-plugin依赖,这个maven-dependency-plugin依赖的作用就是自动拷贝jar包到target目录

      这是我的Maven子项目打包,指定了将它的依赖的父项目中的jar包拷贝到target下的lib目录

     1 <plugin>
     2     <groupId>org.apache.maven.plugins</groupId>
     3     <artifactId>maven-dependency-plugin</artifactId>
     4     <executions>
     5         <execution>
     6             <id>copy-dependencies</id>
     7             <phase>prepare-package</phase>
     8             <goals>
     9                 <goal>copy-dependencies</goal>
    10             </goals>
    11             <configuration>
    12                 <!-- ${project.build.directory}为Maven内置变量,缺省为target -->
    13                 <outputDirectory>${project.build.directory}/lib</outputDirectory>
    14                 <overWriteReleases>true</overWriteReleases>
    15                 <overWriteSnapshots>true</overWriteSnapshots>
    16                 <overWriteIfNewer>true</overWriteIfNewer>
    17             </configuration>
    18         </execution>
    19     </executions>
    20 </plugin>

     

      关于maven-dependency-plugin:用得最多的几个操作:copy, copy-dependencies和它们对应的unpack, unpack-dependencies
      描述:copy 和 unpack操作是由要拷某个包,这个包需要具体指定要拷哪个包,与当前工程的依赖没有关系。这两者区别-是否解压
         copy-dependencies和unpack-dependencies,但是它是用来拷当前工程的依赖包的。这两者区别-是否解压


     

      copy操作可以用来将某个(些)maven artifact(s)拷贝到某个目录下。添加phase和goal如下:
      

     1     <build>
     2         <plugins>
     3             <plugin>
     4                 <groupId>org.apache.maven.plugins</groupId>
     5                 <artifactId>maven-dependency-plugin</artifactId>
     6                 <version>2.8</version>
     7                 <executions>
     8                     <execution>
     9                         <phase>package</phase>
    10                         <goals>
    11                             <goal>copy</goal>
    12                         </goals>
    13                     </execution>
    14                 </executions>
    15             </plugin>
    16         </plugins>
    17     </build>

      然后就是配置,copy可以的配置的项比较多,详细的请参考:copy配置。下面是一些常用项说明:

        ● artifactItems: 指定要拷贝的jar包
        ● prependGroupId: 用来指示拷出来的library名字需要不需要加上groupId,默认是不加
        ● outputDirectory: 用来指定拷出后Libraries的存放地


      这里除了artifactItems没有默认值,需要指定外,所有其他的选项都可以被忽略:

    1     <configuration>
    2         <artifactItems>
    3             <artifactItem>
    4                 <groupId>junit</groupId>
    5                 <artifactId>junit</artifactId>
    6                 <version>4.11</version>
    7             </artifactItem>
    8         </artifactItems>
    9     </configuration>

      以上配置会将junit包拷到target/dependency目录下,文件名为:junit-4.11.jar。

      unpack和copy类似,只不过它会把拷来的包解开。junit拷完以后,放到lib和lib2下的不再是Jar包,还是Jar包里的内容。

      copy-dependenciesunpack-dependencies
      上面介绍的copy 和 unpack操作是由要拷某个包,这个包需要具体指定要拷哪个包,与当前工程的依赖没有关系。copy-dependencies和它有点类似,但是它是用来拷当前工程的依赖包的,典型的,例如我们有一个web应用,当打成war包的时候,它所有的依赖也需要被打到应用中。
     
      copy-dependencies的参数有很多,详细的可以参考:copy-dependencies Doc,但是几乎所有都有默认值。所以一个最简单的定义如下:

     1 <plugin>
     2         <groupId>org.apache.maven.plugins</groupId>
     3         <artifactId>maven-dependency-plugin</artifactId>
     4         <version>2.8</version>
     5         <executions>
     6             <execution>
     7                 <phase>package</phase>
     8                 <goals>
     9                     <goal>copy-dependencies</goal>
    10                 </goals>
    11             </execution>
    12         </executions>
    13     </plugin>

    这里没有指定任何配置,所有的参数都用默认值,则当前工程的所有依赖(直接、间接的)都会被拷到target/dependency目录下。
    也可以使用outputDirectory指定存放在。另外,以下几个参数可以控制哪些依赖将被拷出(或排除):
    excludeArtifactIds
    excludeClassifiers
    excludeGroupIds
    excludeScope 
    excludeTransitive
    excludeTypes
    includeArtifactIds
    includeClassifiers
    includeGroupIds
    includeScope
    includeTypes

  • 相关阅读:
    luoguP4336 [SHOI2016]黑暗前的幻想乡 容斥原理 + 矩阵树定理
    luoguP4208 [JSOI2008]最小生成树计数 矩阵树定理
    luoguP2303 [SDOI2012]Longge的问题 化式子
    poj1704 Georgia and Bob 博弈论
    poj3537 Crosses and Crosses 博弈论
    luoguP4783 [模板]矩阵求逆 线性代数
    luoguP5108 仰望半月的夜空 [官方?]题解 后缀数组 / 后缀树 / 后缀自动机 + 线段树 / st表 + 二分
    [Luogu5319][BJOI2019]奥术神杖(分数规划+AC自动机)
    Forethought Future Cup
    Codeforces Round 554 (Div.2)
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/mavenJarDependency.html
Copyright © 2011-2022 走看看