maven打包插件maven-jar-plugin和maven-dependency-plugin详解

2021-05-29 19:12

阅读:492

标签:rect   ack   jdbc   plugin   属性   pom   ref   compile   yun   

maven-jar-plugin插件的使用及详解

该插件的xml配置及详解如下:

org.apache.maven.plugins
	maven-jar-plugin
	2.4
			true
			
			false
				true
				
				lib/com.ht.pojo.Test../config/${project.build.directory}/lib**/*.class**/*.properties

使用clean package命令打包成功后,目录结构如下所示:

技术图片

打开meventest-0.0.1-SNAPSHOT.jar文件,查看打包成功后的项目结构

技术图片

maven-dependency-plugin插件的使用及详解

简介

maven-dependency-plugin是处理与依赖相关的插件。它有很多可用的goal,大部分是和依赖构建、分析和解决相关的goal,这部分goal可以直接用maven的命令操作,例如:mvn dependency:tree、mvn dependency:analyze 。

但是我们最常用到的是 dependency:copy,dependency:copy-dependencies 及dependency:unpack ,dependency:unpack-dependencies 这四个。

使用

插件声明:

org.apache.maven.plugins  
    maven-dependency-plugin  
    2.8

dependency:copy

将一系列在此插件内列出的artifacts ,将他们copy到一个特殊的地方,重命名或者去除其版本信息。这个可以解决远程仓库存在但是本地仓库不存在的依赖问题,copy操作可以用来将某个(些)maven artifact(s)拷贝到某个目录下。添加phase和goal如下

org.apache.maven.plugins  
            maven-dependency-plugin  
            2.8packagecopy

比如把junit拷到libs目录下

org.apache.maven.plugins
    maven-dependency-plugin
    2.8packagecopyjunit
                        junit
                        4.11${project.build.directory}/libs

执行mvn package打包命令之后,会多出libs目录

技术图片

dependency:unpack

unpack和copy类似,只不过它会把拷来的包解开,例如:

org.apache.maven.plugins
    maven-dependency-plugin
    2.8packageunpackorg.slf4j
                        slf4j-log4j12
                        1.7.7junit
                        junit
                        4.11${project.build.directory}/libslib

执行mvn package打包命令之后,slf4j复制到lib目录下,junit复制到libs目录下

技术图片

junit和slf4j-log4j12拷完以后,放到lib和libs下的不再是Jar包,还是Jar包里的内容。

copy-dependencies 和 unpack-dependencies

上面介绍的copy 和 unpack操作是由要拷某个包,这个包需要具体指定要拷哪个包,与当前工程的依赖没有关系。

copy-dependencies和它有点类似,但是它是用来拷当前工程的依赖包的,典型的,例如我们有一个web应用,当打成war包的时候,它所有的依赖也需要被打到应用中。

copy-dependencies的参数有很多,详细的可以参考:copy-dependencies Doc,但是几乎所有都有默认值。所以一个最简单的定义如下:

org.apache.maven.plugins  
    maven-dependency-plugin  
    2.8packagecopy-dependencies

这里没有指定任何配置,所有的参数都用默认值,则当前工程的所有依赖(直接、间接的)都会被拷到target/dependency目录下。

也可以使用outputDirectory指定存放在。另外,以下几个参数可以控制哪些依赖将被拷出(或排除):

Name Type Since Description
excludeArtifactIds String 2.0 Comma separated list of Artifact names to exclude. User property is: excludeArtifactIds.
excludeClassifiers String 2.0 Comma Separated list of Classifiers to exclude. Empty String indicates don‘t exclude anything (default). User property is: excludeClassifiers.
excludeGroupIds String 2.0 Comma separated list of GroupId Names to exclude. User property is: excludeGroupIds.
excludeScope String 2.0 Scope to exclude. An Empty string indicates no scopes (default). User property is: excludeScope.
excludeTransitive boolean 2.0 If we should exclude transitive dependencies Default value is: false. User property is: excludeTransitive.
excludeTypes String 2.0 Comma Separated list of Types to exclude. Empty String indicates don‘t exclude anything (default). User property is: excludeTypes.
includeArtifactIds String 2.0 Comma separated list of Artifact names to include. User property is: includeArtifactIds.
includeClassifiers String 2.0 Comma Separated list of Classifiers to include. Empty String indicates include everything (default). User property is: includeClassifiers.
includeGroupIds String 2.0 Comma separated list of GroupIds to include. User property is: includeGroupIds.
includeScope String 2.0 Scope to include. An Empty string indicates all scopes (default). The scopes being interpreted are the scopes as Maven sees them, not as specified in the pom. In summary: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. User property is: includeScope.
includeTypes String 2.0 Comma Separated list of Types to include. Empty String indicates include everything (default). User property is: includeTypes.

例如当前工程有以下依赖:

junit  
        junit  
        4.11testorg.slf4j  
        slf4j-log4j12  
        1.7.7testorg.apache.camel  
        camel-script  
        2.13.2org.apache.camel  
        camel-spring  
        2.13.2org.apache.camel  
        camel-xstream  
        2.13.2org.springframework  
        spring-jms  
        3.2.4.RELEASEorg.springframework  
        spring-tx  
        3.2.4.RELEASEorg.apache.activemq  
        activemq-all  
        5.10.0com.thoughtworks.xstream  
        xstream  
        1.4.7org.ogce  
        xpp3  
        1.1.6

要排除所有scope为test的依赖:

org.apache.maven.plugins  
    maven-dependency-plugin  
    2.8packagecopy-dependenciescompile

注意:这里不能test,这样会把所有compile级别的也排除。看下图:

Copied From: Dependencies Scopes

scope/phase-> compile test run assembly
compile U U U U
provided U ! ! !
runtime ! U U U
test ! U ! !

说明:最左侧是表示dependency的scope级别,顶行表示maven的阶段,可以看出:compile级别的dependency会在所有阶段都被使用。

要排除所有camel的依赖,如下:

org.apache.camel

要排除除camel-spring外的所有其他依赖如下:

camel-spring

例子

打包需求描述

1、导出单独的项目jar包(精简,不包含依赖jar)

2、项目依赖的所有jar包导出到lib目录下

3、项目依赖oracle ojdbc8.jar,假设在maven仓库中并不存在,需要一并导出并添加进MANIFEST.MF文件中的Class-Path。--也可以将ojdbc8安装到本地maven仓库后直接导出

工程目录:

技术图片

maven pom.xml

4.0.0cn.xk.dp
		thirdparty
		0.0.1-SNAPSHOT
	weixin-api

	UTF-82.13.0org.slf4j
			slf4j-api
			1.7.30org.apache.logging.log4j
			log4j-core
			${log4j.version}org.apache.logging.log4j
			log4j-slf4j-impl
			${log4j.version}org.apache.httpcomponents
			httpclient
			4.5.11commons-logging
					commons-logging
				org.slf4j
			jcl-over-slf4j
			1.7.30com.alibaba
			fastjson
			1.2.66oracle 
   			ojdbc8 
   			1.0system${pom.basedir}/lib/ojdbc8.jarorg.apache.maven.plugins
                maven-jar-plugin
                3.2.0
                            true
                            falselib/cn.xk.dp.weixin.Driverlib/ojdbc8-1.0.jarlog4j2-test.xmlorg.apache.maven.plugins
		  maven-dependency-plugin
		  copy-dependenciespackagecopy-dependenciesjarjar${project.build.directory}/lib

maven打包插件maven-jar-plugin和maven-dependency-plugin详解

标签:rect   ack   jdbc   plugin   属性   pom   ref   compile   yun   

原文地址:https://www.cnblogs.com/satire/p/14764582.html

上一篇:IDL语言简明教程

下一篇:Java——代码块


评论


亲,登录后才可以留言!