您的位置:首页 > 其它

Maven 基础知识大全

2015-12-19 13:49 423 查看
maven 代理服务器设置

第一、找到你的setting配置文件 –>找到文件 {M2_HOME}/conf/settings.xml, 并把你的代理服务器信息配置写入。注:{M2_HOME} 是安装时配置的path路径,.m2的文件位置

第二、配置代码

<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>yuanxiaojun</username>
<password>password</password>
<host>proxy.yuanxiaojun.com</host>
<port>8888</port>
<nonProxyHosts>www.yuanxiaojun.com</nonProxyHosts>
</proxy>
</proxies>


maven本地库设置

1.默认情况下,Maven的本地资源库默认为 .m2 目录文件夹:
Unix/Mac OS X – ~/.m2
Windows – C:\Documents and Settings\{your-username}\.m2
2. 更新Maven的本地库
通常情况下,可改变默认的 .m2 目录下的默认本地存储库文件夹到其他更有意义的名称,例如, maven-repo
找到 {M2_HOME}\conf\setting.xml, 更新 localRepository 到其它名称。
{M2_HOME}\conf\setting.xml
<settings><!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
--><localRepository>D:\software\yuanxiaojun.com\apache-maven\repository</localRepository>


安装第三方jar到本地仓库maven中

这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库。 要使用的 jar 不存在于 Maven 的中心储存库中。 您创建了一个自定义的 jar ,而另一个 Maven 项目需要使用。
*PS,还是有很多 jar 不支持 Maven 的。*

案例学习
例如,kaptcha,它是一个流行的第三方Java库,它被用来生成 “验证码” 的图片,以阻止垃圾邮件,但它不在 Maven 的中央仓库中。
在本教程中,我们将告诉你如何安装 “kaptcha” jar 到Maven 的本地资源库。
1. mvn 安装
下载 “kaptcha”,将其解压缩并将 kaptcha-version.jar 复制到其他地方,比如:C盘。发出下面的命令:
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
示例:
D:\>mvn install:install-file -Dfile=c:\kaptcha-2.3.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ---------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [install:install-file] (aggregator-style)
[INFO] ---------------------------------------------------------------
[INFO] [install:install-file]
[INFO] Installing c:\kaptcha-2.3.jar to
D:\maven_repo\com\google\code\kaptcha\2.3\kaptcha-2.3.jar
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ---------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Tue May 12 13:41:42 SGT 2014
[INFO] Final Memory: 3M/6M
[INFO] ---------------------------------------------------------------

现在,“kaptcha” jar被复制到 Maven 本地存储库。

- pom.xml
安装完毕后,就在 pom.xml 中声明 kaptcha 的坐标。
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3</version>
</dependency>

- 完成
构建它,现在 “kaptcha” jar 能够从你的 Maven 本地存储库检索了。


maven打包

Maven 打包

现在,我们将使用Maven这个项目,并输出编译成一个 “jar” 的文件。 请参考 pom.xml 文件,包元素定义应该包应该输出什么。
pom.xml

<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yiibai</groupId>
<artifactId>NumberGenerator</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>

在终端输入 *mvn package* :

C:\worksp\NumberGenerator> mvn package
... ...
ha-2/classworlds-1.1-alpha-2.jar (37 KB at 20.2 KB/sec)
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2 .0.2/plexus-io-2.0.2.jar (57 KB at 28.1 KB/sec)
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-inte rpolation/1.15/plexus-interpolation-1.15.jar (60 KB at 21.4 KB/sec)
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-arch iver/2.1/plexus-archiver-2.1.jar (181 KB at 61.5 KB/sec)
Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-util s/3.0/plexus-utils-3.0.jar (221 KB at 60.3 KB/sec)
[INFO] Building jar: C:\worksp\NumberGenerator\target\NumberGenerator-1.0-SNAPSH
OT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:00 min
[INFO] Finished at: 2015-10-27T20:00:17+08:00
[INFO] Final Memory: 10M/54M
[INFO] --------------------------------------------------------------


1.前言

Maven,发音是[`meivin],”专家”的意思。它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项目完全迁移并应用maven,所以对maven进行了一些深入的学习。写这个学习笔记的目的,一个是为了自己备忘,二则希望能够为其他人学习使用maven 缩短一些时间。

2.命令

mvn pom.xml文件配置详解

http://maven.apache.org/ref/2.0.8/maven-model/maven.html

mvn -version/-v 显示版本信息
mvn archetype:generate   创建mvn项目
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app   创建mvn项目

mvn package    生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
mvn jetty:run    运行项目于jetty上,
mvn compile      编译
mvn test      编译并测试
mvn clean      清空生成的文件
mvn site      生成项目相关信息的网站
mvn -Dwtpversion=1.0 eclipse:eclipse   生成Wtp插件的Web项目
mvn -Dwtpversion=1.0 eclipse:clean   清除Eclipse项目的配置信息(Web项目)
mvn eclipse:eclipse     将项目转化为Eclipse项目


在应用程序用使用多个存储库


<repositories>
<repository>
<id>Ibiblio</id>
<name>Ibiblio</name>
<url>http://www.ibiblio.org/maven/</url>
</repository>
<repository>
<id>PlanetMirror</id>
<name>Planet Mirror</name>
<url>http://public.planetmirror.com/pub/maven/</url>
</repository>
</repositories>


mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/


发布第三方Jar到本地库中:


mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar

-DdownloadSources=true

-DdownloadJavadocs=true

mvn -e    显示详细错误 信息.

mvn validate   验证工程是否正确,所有需要的资源是否可用。
mvn test-compile 编译项目测试代码。 。
mvn integration-test 在集成测试可以运行的环境中处理和发布包。
mvn verify   运行任何检查,验证包是否有效且达到质量标准。
mvn generate-sources 产生应用需要的任何额外的源代码,如xdoclet。


2 maven概要

首先我把maven的概念快速的梳理一下,让我们快速地建立起一个比较精确的maven应用场景。

2.1 maven不是什么

读书时候要先限定范围,避免一些有害的遐想。要说maven不是什么,我们可以从如下几个要点来展开

maven不是ant,也不是make。

我们以前接触的构建工具,需要写一些详细的步骤,比如: compile project1/src/*.java 等类似的语句。这些语句正是我们使用ant和make所要编写的东西。maven采用了”约定优于配置”的方法,一些开发常用的操作和步骤已经固化在 maven中,所以使用者不再需要去编写那些烦人的语句了。同时,maven内置了开发流程的支持,它不仅能够编译,同样能够打包、发布,也能够一气呵成做完这些所有的步骤。

maven不是ivy

依赖管理是maven的功能之一,虽然很多人包括我以前都是只用它的依赖管理功能,但是要深入运用的话,我们就可以看到更多的内容。更重要的是,maven在依赖关系中加入了scope的概念,进一步细化了依赖关系的划分。

2.2 maven是什么

maven将自己定位为一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西:

版本

maven有自己的版本定义和规则

构建

maven支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。

输出物管理

maven可以管理项目构建的产物,并将其加入到用户库中。这个功能可以用于项目组和其他部门之间的交付行为。

依赖关系

maven对依赖关系的特性进行细致的分析和划分,避免开发过程中的依赖混乱和相互污染行为

文档和构建结果

maven的site命令支持各种文档信息的发布,包括构建过程的各种输出,javadoc,产品文档等。

项目关系

一个大型的项目通常有几个小项目或者模块组成,用maven可以很方便地管理

移植性管理

maven可以针对不同的开发场景,输出不同种类的输出结果。

2.3 maven的生命周期

maven把项目的构建划分为不同的生命周期(lifecycle),在我看来,划分的已经是非常仔细了,大家可以参考这里。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。

这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。

2.4 maven的”约定优于配置”

所谓的”约定优于配置”,在maven中并不是完全不可以修改的,他们只是一些配置的默认值而已。但是使用者除非必要,并不需要去修改那些约定内容。maven默认的文件存放结构如下:

/项目目录

pom.xml 用于maven的配置文件

/src 源代码目录

/src/main 工程源代码目录

/src/main/java 工程java源代码目录

/src/main/resource 工程的资源目录

/src/test 单元测试目录

/src/test/java

/target 输出目录,所有的输出物都存放在这个目录下

/target/classes 编译之后的class文件

每一个阶段的任务都知道怎么正确完成自己的工作,比如compile任务就知道从src/main/java下编译所有的java文件,并把它的输出class文件存放到target/classes中。

对maven来说,采用”约定优于配置”的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。

2.5 maven的版本规范

maven使用如下几个要素来唯一定位某一个输出物: groupId:artifactId:packaging:version 。比如org.springframework:spring:2.5 。每个部分的解释如下:

groupId

团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。来自Sonatype的项目有一个以com.sonatype开头的groupId,而Apache Software的项目有以org.apache开头的groupId。

artifactId

在groupId下的表示一个单独项目的唯一标识符。比如我们的tomcat, commons等。不要在artifactId中包含点号(.)。

version

一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个”SNAPSHOT”的标记。

虽然项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部分。一个项目的 groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有同样的groupId, artifactId和version标识的项目。

packaging

项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。

classifier

很少使用的坐标,一般都可以忽略classifiers。如果你要发布同样的代码,但是由于技术原因需要生成两个单独的构件,你就要使用一个分类器(classifier)。例如,如果你想要构建两个单独的构件成JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件,它们有同样的groupId:artifactId:version组合。如果你的项目使用本地扩展类库,你可以使用分类器为每一个目标平台生成一个构件。分类器常用于打包构件的源码,JavaDoc或者二进制集合。

maven有自己的版本规范,一般是如下定义 ..- ,比如1.2.3-beta-01。要说明的是,maven自己判断版本的算法是major,minor,incremental部分用数字比较,qualifier部分用字符串比较,所以要小心 alpha-2和alpha-15的比较关系,最好用 alpha-02的格式。

maven在版本管理时候可以使用几个特殊的字符串 SNAPSHOT ,LATEST ,RELEASE 。比如”1.0-SNAPSHOT”。各个部分的含义和处理逻辑如下说明:

SNAPSHOT

如果一个版本包含字符串”SNAPSHOT”,Maven就会在安装或发布这个组件的时候将该符号展开为一个日期和时间值,转换为UTC时间。例如,”1.0-SNAPSHOT”会在2010年5月5日下午2点10分发布时候变成1.0-20100505-141000-1。

这个词只能用于开发过程中,因为一般来说,项目组都会频繁发布一些版本,最后实际发布的时候,会在这些snapshot版本中寻找一个稳定的,用于正式发布,比如1.4版本发布之前,就会有一系列的1.4-SNAPSHOT,而实际发布的1.4,也是从中拿出来的一个稳定版。

LATEST

指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个时间最后。

RELEASE

指最后一个发布版。

2.6 maven的组成部分

maven把整个maven管理的项目分为几个部分,一个部分是源代码,包括源代码本身、相关的各种资源,一个部分则是单元测试用例,另外一部分则是各种maven的插件。对于这几个部分,maven可以独立管理他们,包括各种外部依赖关系。

2.7 maven的依赖管理

依赖管理一般是最吸引人使用maven的功能特性了,这个特性让开发者只需要关注代码的直接依赖,比如我们用了spring,就加入spring依赖说明就可以了,至于spring自己还依赖哪些外部的东西,maven帮我们搞定。

任意一个外部依赖说明包含如下几个要素:groupId, artifactId, version, scope, type, optional。其中前3个是必须的,各自含义如下:

groupId 必须
artifactId 必须
version 必须。


这里的version可以用区间表达式来表示,比如(2.0,)表示>2.0,[2.0,3.0)表示2.0<=ver<3.0;多个条件之间用逗号分隔,比如[1,3),[5,7]。

scope 作用域限制

type 一般在pom引用依赖时候出现,其他时候不用

optional 是否可选依赖

maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。在maven中,scope包含如下的取值:

compile(编译范围)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。

provided(已提供范围)

provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。

runtime(运行时范围)

runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

test(测试范围)

test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。测试范围依赖在之前的???中介绍过。

system(系统范围)

system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。 如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素 。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。

另外,代码有代码自己的依赖,各个maven使用的插件也可以有自己的依赖关系。依赖也可以是可选的,比如我们代码中没有任何cache依赖,但是hibernate可能要配置cache,所以该cache的依赖就是可选的。

2.8 多项目管理

maven的多项目管理也是非常强大的。一般来说,maven要求同一个工程的所有子项目都放置到同一个目录下,每一个子目录代表一个项目,比如

总项目/
pom.xml 总项目的pom配置文件
子项目1/
pom.xml 子项目1的pom文件
子项目2/
pom.xml 子项目2的pom文件


按照这种格式存放,就是继承方式,所有具体子项目的pom.xml都会继承总项目pom的内容,取值为子项目pom内容优先。

要设置继承方式,首先要在总项目的pom中加入如下配置

simple-weather

simple-webapp

其次在每个子项目中加入

org.sonatype.mavenbook.ch06

simple-parent

1.0

即可。

当然,继承不是唯一的配置文件共用方式,maven还支持引用方式。引用pom的方式更简单,在依赖中加入一个type为pom的依赖即可。

This is a project requiring JDBC





org.sonatype.mavenbook

persistence-deps

1.0

pom

2.9 属性

用户可以在maven中定义一些属性,然后在其他地方用${xxx}进行引用。比如:

4.0.0



value1

maven提供了三个隐式的变量,用来访问系统环境变量、POM信息和maven的settings:

env
暴露操作系统的环境变量,比如env.PATH
project
暴露POM中的内容,用点号(.)的路径来引用POM元素的值,比如${project.artifactId}。另外,java的系统属性比如user.dir等,也暴露在这里。
settings
暴露maven的settings的信息,也可以用点号(.)来引用。maven把系统配置文件存放在maven的安装目录中,把用户相关的配置文件存放在~/.m2/settings.xml(unix)或者%USERPROFILE%/.m2/settings.xml(windows)中。


2.10 maven的profile

profile是maven的一个重要特性,它可以让maven能够自动适应外部的环境变化,比如同一个项目,在linux下编译linux的版本,在win下编译win的版本等。一个项目可以设置多个profile,也可以在同一时间设置多个profile被激活(active)的。自动激活的 profile的条件可以是各种各样的设定条件,组合放置在activation节点中,也可以通过命令行直接指定。profile包含的其他配置内容可以覆盖掉pom定义的相应值。如果认为profile设置比较复杂,可以将所有的profiles内容移动到专门的 profiles.xml 文件中,不过记得和pom.xml放在一起。

activation节点中的激活条件中常见的有如下几个:

os
判断操作系统相关的参数,它包含如下可以自由组合的子节点元素
message - 规则失败之后显示的消息
arch - 匹配cpu结构,常见为x86
family - 匹配操作系统家族,常见的取值为:dos,mac,netware,os/2,unix,windows,win9x,os/400等
name - 匹配操作系统的名字
version - 匹配的操作系统版本号
display - 检测到操作系统之后显示的信息
jdk
检查jdk版本,可以用区间表示。
property
检查属性值,本节点可以包含name和value两个子节点。
file
检查文件相关内容,包含两个子节点:exists和missing,用于分别检查文件存在和不存在两种情况。


maven的操作和使用

maven的操作有两种方式,一种是通过mvn命令行命令,一种是使用maven的eclipse插件。因为使用eclipse的maven插件操作起来比较容易,这里就只介绍使用mvn命令行的操作。

3.1 maven的配置文件

maven的主执行程序为mvn.bat,linux下为mvn.sh,这两个程序都很简单,它们的共同用途就是收集一些参数,然后用 java.exe来运行maven的Main函数。maven同样需要有配置文件,名字叫做settings.xml,它放在两个地方,一个是maven 安装目录的conf目录下,对所有使用该maven的用户都起作用,我们称为主配置文件,另外一个放在 %USERPROFILE%/.m2/settings.xml下,我们成为用户配置文件,只对当前用户有效,且可以覆盖主配置文件的参数内容。还有就是项目级别的配置信息了,它存放在每一个maven管理的项目目录下,叫pom.xml,主要用于配置项目相关的一些内容,当然,如果有必要,用户也可以在 pom中写一些配置,覆盖住配置文件和用户配置文件的设置参数内容。

一般来说,settings文件配置的是比如repository库路径之类的全局信息,具体可以参考官方网站的文章 。

3.2 创建新工程

要创建一个新的maven工程,我们需要给我们的工程指定几个必要的要素,就是maven产品坐标的几个要素:groupId, artifactId,如果愿意,你也可以指定version和package名称。我们先看一个简单的创建命令:

d:\work\temp>mvn archetype:create -DgroupId=com.abc -DartifactId=product1 -DarchetypeArtifactId=maven-archetype-webapp

首先看这里的命令行参数的传递结构,怪异的 -D参数=值 的方式是 java.exe 要求的方式。这个命令创建一个web工程,目录结构是一个标准的maven结构,如下:

D:.

└─mywebapp

│ pom.xml



└─src

└─main

├─resources

└─webapp

│ index.jsp



└─WEB-INF

web.xml

大家要注意,这里目录结构的布局实际上是由参数 archetypeArtifactId 来决定的,因为这里传入的是 maven-archetype-webapp 如果我们传入其他的就会创建不同的结构,默认值为 maven-archetype-quickstart ,有兴趣的读者可以参考更详细的列表 ,我把部分常用的列表在这里:

Artifact Group Version Repository Description

maven-archetype-j2ee-simple org.apache.maven.archetypes A simple J2EE Java application

maven-archetype-marmalade-mojo org.apache.maven.archetypes A Maven plugin development project using marmalade

maven-archetype-plugin org.apache.maven.archetypes A Maven Java plugin development project

maven-archetype-portlet org.apache.maven.archetypes A simple portlet application

maven-archetype-profiles org.apache.maven.archetypes

maven-archetype-quickstart org.apache.maven.archetypes

maven-archetype-simple org.apache.maven.archetypes

maven-archetype-site-simple org.apache.maven.archetypes A simple site generation project

maven-archetype-site org.apache.maven.archetypes A more complex site project

maven-archetype-webapp org.apache.maven.archetypes A simple Java web application

maven-archetype-har net.sf.maven-har 0.9 Hibernate Archive

maven-archetype-sar net.sf.maven-sar 0.9 JBoss Service Archive

大家可以参考更详细的 archetype:create 帮助 和 archtype参考信息 。

3.3 maven的多项目管理

多项目管理是maven的主要特色之一,对于一个大型工程,用maven来管理他们之间复杂的依赖关系,是再好不过了。maven的项目配置之间的关系有两种:继承关系和引用关系。

maven默认根据目录结构来设定pom的继承关系,即下级目录的pom默认继承上级目录的pom。要设定两者之间的关系很简单,上级pom如下设置:

ABCCommon

ABCCore

ABCTools

要记住的是,这里的module是目录名,不是子工程的artifactId。子工程如下设置:

com.abc.product1

abc-product1

1.0.0-SNAPSHOT

abc-my-module2

jar

这样两者就相互关联起来了,继承关系就设定完毕,所有父工程的配置内容都会自动在子工程中生效,除非子工程有相同的配置覆盖。如果你不喜欢层层递进的目录结构来实现继承,也可以在parent中加入../a-parent/pom.xml 来制定parent项目的相对目录。继承关系通常用在项目共同特性的抽取上,通过抽取公共特性,可以大幅度减少子项目的配置工作量。

引用关系是另外一种复用的方式,maven中配置引用关系也很简单,加入一个 type 为 pom 的依赖即可。

org.sonatype.mavenbook

persistence-deps

1.0

pom

但是无论是父项目还是引用项目,这些工程都必须用 mvn install 或者 mvn deploy 安装到本地库才行,否则会报告依赖没有找到,eclipse编译时候也会出错。

需要特别提出的是复用过程中,父项目的pom中可以定义 dependencyManagement 节点,其中存放依赖关系,但是这个依赖关系只是定义,不会真的产生效果,如果子项目想要使用这个依赖关系,可以在本身的 dependency 中添加一个简化的引用

org.springframework

spring

这种方法可以避免版本号满天飞的情况。

3.4 安装库文件到maven库中

在maven中一般都会用到安装库文件的功能,一则是我们常用的hibernate要使用jmx库,但是因为sun的license限制,所以无法将其直接包含在repository中。所以我们使用mvn命令把jar安装到我们本地的repository中

mvn install:install-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=/path/to/file

如果我们想把它安装到公司的repository中,需要使用命令

mvn deploy:deploy-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=/path/to/file -Durl=http://xxx.ss.com/sss.xxx -DrepositoryId=release-repo

对于我们的工程输出,如果需要放置到公司的repository中的话,可以通过配置pom来实现

mycompany-repository

MyCompany Repository

scp://repository.mycompany.com/repository/maven2

这里使用的scp方式提交库文件,还有其他方式可以使用,请参考faq部分。然后记得在你的settings.xml中加入这一内容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: