您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页maven_使用

maven_使用

来源:爱问旅游网


安装Eclipse IDE for Java EE Developers

解压eclipse-jee-galileo-win32.zip

打开eclipse.exe,配置eclipse

设置工作区编码设为utf-8;

Window->preference

导入本地的java

给eclipse安装插件

进入安装插件目录

2.3.1先安装subeclipse插件就是svn

svn - http://subclipse.tigris.org/update_1.6.x

我这里是灰色的说明我安装过了这里只是截图说明下,我就不继续安装了

安装这些就可以了,多了没必要。

安装过程中可能会出异常,请不用管它,subclipse官方说这异常时插件没被eclipse标注,对安装使用没啥影响,继续就好。

安装完后重启eclipse点右上角圈中按钮,出现svn资源库研究项

表示eclipse的svn插件已经按装完成。

2.3.2再安装maven插件

m2e - http://m2eclipse.sonatype.org/sites/m2e

我这里是灰色的说明我安装过了这里只是截图说明下,我就不继续安装了

安装完成后重启eclipse

点击左侧项目区新建项目选Other

找到maven如下,有maven项,说明maven插件安装成功

配置maven,默认的eclipse的maven插件的maven版本是3.0我们要改成自己装的maven-2.2.1版本.

进入eclipse的配置中,选择maven配置项installatiions,and找到你的本机maven安装目录.

配置maven 的setting.xml

点击应用.ok.,到这里maven配置也就完成了

2.3.3最后安装maven插件的扩展插件包

m2e-extras - http://m2eclipse.sonatype.org/sites/m2e-extras

都选上,其中maven scm handler for subclipse 就是让maven支持svn,前提你先装subeclipse插件,其他插件和咋们后面部署hippo没关系,就不介绍了,但建议都装上.

安装过程中也可能出现类似安装subeclipse时的异常,不用理会,继续就好.安装完后重启.

新建项目选other,找到maven项

点击Checkout Maven Projects from SCM

出现svn选项表示插件安装成功了.

Eclipse is running in a JRE, but a JDK is required

Some Maven plugins may not work when importing projects or updating source folders.

在eclipse.ini中添加VM启动参数,制定eclipse启动使用的vm,修改后的文件内容如下

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256M

-vm

C:\\Program Files\\Java\\jdk1.5.0_12\\bin\\javaw.exe

-vmargs

-Dosgi.requiredJavaVersion=1.5

-Xms40m

-Xmx512m

解决eclipse安装maven的问题:Unable to update index for central|http://repo1.maven.org/maven2

copy一个settings.xml到C:/Documents and Settings/username/.m2目录,并修改settings.xml文件,添加一个http代理:

optional

true

http

www.yourproxy.com

8080

1. 安装m2eclipse插件

要用Eclipse构建Maven项目,我们需要先安装meeclipse插件

点击eclipse菜单栏Help->Eclipse Marketplace搜索到插件Maven Integration for Eclipse 并点击安装即可,如下图:

安装成成之后我们在Eclipse菜单栏中点击File->New->Other,在弹出的对话框中会看到如下图所示:

2. 构建Maven项目

以eclipse3.6为例

1)创建简单Maven项目

点击Eclipse菜单栏File->New->Ohter->Maven得到如下图所示对话框:

选中Maven Project并点击Next,到下一个对话框继续点击Next得到如下对话框

如图示操作,选择maven-archetype-quickstart,点击Next

按图示填写好groupId, artfactId,version等信息,点击Finish。

由此我们成功创建了一个简单的Maven项目,项目结构如图所示

2)创建Maven web项目

操作跟创建简单Maven项目类似,点击Eclipse菜单File->New->Other->Maven->Maven Project

在选择maven-archetype的界面进行如下操作:

点击Next,填写好相应的groupId,artifactId,version等信息,点击Finish

得到的Maven web项目结构如下图所示:

右击项目,点击Properties->Project Facets

如上图可以看到项目为web2.3 java1.5 当然我们也可以改成我们所需要的版本,打开xml文件my-app-web/.settings/org.eclipse.wst.common.project.facet.core.xml,进行修改即可:

Xml代码

1.

2.

3.

4.

5.

6.

7.

3)导入Maven项目

在Eclipse project explorer中右击,在弹出框中选择import,得到如下图所示:

选择Existing Maven Projects,并点击Next,得到如下图所示对话框:

选择一个已经创建好的Maven项目,并点击Finish。

由此,导入Maven项目成功

3. 运行Maven命令

右击项目,点击Run as,如下图:

即可看到有很多现有的maven命令,点击即可运行,并在控制台可以看到运行信息

如果你想运行的maven命令在这里没有找到,点击Maven build创建新的命令,操作如下图所示:

如下图填入Maven命令,点击Run即可

新增的maven命令可以通过如下方式找到,并再次运行:

1. 三套生命周期

Maven拥有三套相互的生命周期,它们分别为clean,default和site。

每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。

以 clean生命周期为例,它包含的阶段有pre-clean, clean 和 post clean。当用户调用pre-clean的时候,只有pre-clean得以执行,当用户调用clean的时候,pre-clean和clean阶段会 得以顺序执行;当用户调用post-clean的时候,pre-clean,clean,post-clean会得以顺序执行。

较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互的,用户可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其他生命周期产生任何影响。

2. clean 生命周期

clean生命周期的目的是清理项目,它包含三个阶段:

1)pre-clean 执行一些清理前需要完成的工作。

2)clean 清理上一次构建生成的文件。

3)post-clean 执行一些清理后需要完成的工作。

3. default 生命周期

default生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:

1) validate 验证项目是否正确和所有需要的相关资源是否可用

2) initialize 初始化构建

3) generate-sources

4) process-sources 处理源代码

5) generate-resources

6) process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。

7) compile 编译项目的主源代码

8) process-classes

9) generate-test-sources

10) process-test-sources 处理项目测试资源文件

11)generate-test-resources

12) process-test-resources 处理测试的资源文件

13)test-compile 编译项目的测试代码

14)process-test-classes

15) test 使用单元测试框架运行测试,测试代码不会被打包或部署

16)prepare-package 做好打包的准备

17)package 接受编译好的代码,打包成可发布的格式

18) pre-integration-test

19) integration-test

20) post integration-test

21) verify

22) install 将包安装到Maven本地仓库,供本地其他Maven项目使用

23)deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

4. site 生命周期

site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:

1)pre-site 执行一些在生成项目站点之前需要完成的工作

2)site 生成项目站点文档

3)post-site 执行一些在生成项目站点之后需要完成的工作

4)site-deploy 将生成的项目站点发布到服务器上

1.为什么要定义Maven坐标

在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的。在这个基础上,其他Maven项目才能应用该项目生成的构件。

2.Maven坐标详解

Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,它们是groupId,artifactId,version,packaging,class-sifer。下面是一组坐标定义:

Xml代码

1. com.mycompany.app

2. my-app

3. jar

4. 0.0.1-SNAPSHOT

下面讲解一下各个坐标元素:

groupId :定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关 系。比如SpringFrameWork这一实际项目,其对应的Maven项目会有很多,如spring-core,spring-context等。这 是由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织 下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义Maven项目(模块),那么实际项目这个层 次将难以定义。最后,groupId的表示方式与Java包名的表达方式类似,通常与域名反向一一对应。

artifactId : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。比如上例中的my-app。

version : 该元素定义Maven项目当前的版本

packaging :定义Maven项目打包的方式,首先,打包方式通常与所生成构件的文件扩展名对应,如上例中的packaging为jar,最终的文件名为my- app-0.0.1-SNAPSHOT.jar。也可以打包成war, ear等。当不定义packaging的时候,Maven 会使用默认值jar

classifier: 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为my-app-0.0.1-SNAPSHOT.jar,该项目可能还会 通过一些插件生成如

my-app-0.0.1-SNAPSHOT-javadoc.jar,my-app-0.0.1-SNAPSHOT- sources.jar, 这样附属构件也就拥有

了自己唯一的坐标

我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可。

1. 依赖配置

依赖可以声明如下:

Xml代码

1.

2. ...

3.

4.

5. group-a

6. artifact-a

7. 1.0

8.

9.

10. group-c

11. excluded-artifact

12.

13.

14.

15.

16. group-a

17. artifact-b

18. 1.0

19. bar

20. runtime

21.

22.

23.

我们在Maven实战(二)中就遇到了依赖的概念,项目中测试需要依赖junit jar包,依赖配置如下:

Xml代码

1.

2.

3. junit

4. junit

5. 3.8.1

6. test

7.

8.

依赖会包含基本的groupId, artifactId,version等元素,根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个依赖。

下面详细讲解每个依赖可以包含的元素:

groupId,artifactId和version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖

type: 依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值是jar

scope: 依赖的范围,下面会进行详解

optional: 标记依赖是否可选

exclusions: 用来排除传递性依赖,下面会进行详解

大部分依赖声明只包含基本坐标。

2. 依赖范围

Maven在编译主代码的时候需要使用一套classpath,在编译和执行测试的时候会使用另一套classpath,实际运行项目的时候,又会使用一套classpath。

依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有以下几种依赖范围:

compile: 编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。

test: 测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。

provided: 已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容

器已经提供,就不需要Maven重复地引入一遍。

runtime: 运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主 代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

system: 系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围依赖时必须通过 systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此 应该谨慎使用。systemPath元素可以引用环境变量,如:

Xml代码

1.

2. javax.sql

3. jdbc-stdext

4. 2.0

5.

6. ${java.home}/lib/rt.jar

7.

import(Maven 2.0.9及以上): 导入依赖范围。该依赖范围不会对三种classpath产生实际的影响,稍

后会介绍到。

3. 传递性依赖

下面我们看一个简单的项目,读者可从附件中下载源码

POM.xml配置如下:

Xml代码

1. 2. xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">

3. 4.0.0

4. com.mycompany.app

5. my-app-simple

6. 0.0.1-SNAPSHOT

7. jar

8. my-app-simple

9. http://maven.apache.org

10.

11. UTF-8

12.

13.

14.

15. junit

16. junit

17. 3.8.1

18. test

19.

20.

21.

22. org.springframework

23. spring-core

24. 2.5.6

25.

26.

27.

我们可以看到此项目引入依赖junit和spring-core,我们可以在Maven仓库中查找spring-core构件,如图:

点击POM我们会看到该文件包含了一个commons-logging依赖:

Xml代码

1.

2. commons-logging

3. commons-logging

4. 1.1.1

5.

那么该依赖会传递到当前项目中,这就是依赖的传递性,打开项目查看Maven dependencies:

4. 可选依赖

有时候我们不想让依赖传递,那么可配置该依赖为可选依赖,将元素optional设置为true即可,例如:

Xml代码

1.

2. commons-logging

3. commons-logging

4. 1.1.1

5. true

6.

那么依赖该项目的另以项目将不会得到此依赖的传递

5. 排除依赖

当我们引入第三方jar包的时候,难免会引入传递性依赖,有些时候这是好事,然而有些时候我们不需要其中的一些传递性依赖

比如上例中的项目,我们不想引入传递性依赖commons-logging,我们可以使用exclusions元素声明排除依 赖,exclusions可以包含一个或者多个exclusion子元素,因此可以排除一个或者多个传递性依赖。需要注意的是,声明exclusions 的时候只需要groupId和artifactId,而不需要version元素,这是因为只需要groupId和artifactId就能唯一定位依赖 图中的某个依赖。换句话说,Maven解析后的依赖中,不可能出现groupId和artifactId相同,但是version不同的两个依赖。

如下是一个排除依赖的例子:

Xml代码

1.

2. org.springframework

3. spring-core

4. 2.5.6

5.

6.

7. commons-logging

8. commons-logging

9.

10.

11.

5. 依赖归类

如果我们项目中用到很多关于Spring Framework的依赖,它们分别是org.springframework:spring-core:2.5.6,

org.springframework:spring-beans:2.5.6,org.springframework:spring- context:2.5.6,它们都是来自同一项目的不同模块。因此,所有这些依赖的版本都是相同的,而且可以预见,如果将来需要升级Spring

Framework,这些依赖的版本会一起升级。因此,我们应该在一个唯一的地方定义版本,并且在dependency声明引用这一版本,这一在 Spring Framework升级的时候只需要修改一处即可。

Xml代码

1. 2. xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">

3. 4.0.0

4. com.mycompany.app

5. my-app-simple

6. 0.0.1-SNAPSHOT

7. jar

8. my-app-simple

9.

10. 2.5.6

11.

12.

13.

14. junit

15. junit

16. 3.8.1

17. test

18.

19.

20. org.springframework

21. spring-core

22. ${springframework.version}

23.

24.

25. org.springframework

26. spring-beans

27. ${springframework.version}

28.

29.

30.

6. 在Eclipse中管理依赖

安装好m2eclipse之后(第2课有详细讲解)就可以用eclipse来管理依赖。

如图,在该项目的pom.xml中点击Dependency Hierarchy可以看到依赖树:

点击Dependencies可以添加新的依赖,点击选择一个依赖,点击remove可以删除,点击Add可以

新增一个依赖,如图:

如下图,搜素org.springframework(此处是从Maven中心仓库进行搜索),选择你想要的模块和版本,点击OK即可:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务