首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

Myeclipse停通过maven管理项目

2013-10-22 
Myeclipse下通过maven管理项目?MavenAnt标准构建文件project.xml 和 maven.xmlbuild.xml特性处理顺序${mav

Myeclipse下通过maven管理项目
?MavenAnt标准构建文件project.xml 和 maven.xmlbuild.xml特性处理顺序

    ${maven.home}/bin/driver.properties${project.home}/project.properties${project.home}/build.properties${user.home}/build.properties通过 -D 命令行选项定义的系统特性

最后一个定义起决定作用。

    通过 -D 命令行选项定义的系统特性由 任务装入的特性

第一个定义最先被处理。

构建规则构建规则更为动态(类似于编程语言);它们是基于 Jelly 的可执行 XML。构建规则或多或少是静态的,除非使用3.Maven的安装部署

maven的官方网址:http://maven.apache.org/

下载地址:http://maven.apache.org/download.html,目前的最新版本是3.0.4

本文章的环境为:windows7旗舰版32位、maven2.2.1、jdk1.6.0_14

安装步骤:

    在D盘创建maven目录(根据自己情况来定);在D:\maven目录下创建mavenRepository目录;将下载的maven安装包解压缩到D:\maven目录下,整个目录看起来如下图所示:Myeclipse停通过maven管理项目在操作系统中增加环境变量,分别添加:M2_HOME=d:\maven\maven,在PATH中添加%M2_HOME%\bin;Myeclipse停通过maven管理项目

很简单,就这几步就安装完了,验证一下是否安装成功,在命令行窗口中输入:mvn -version,能打印出版本信息即安装成功。

4.Maven仓库

刚才在上一章节中,我们创建了mavenRepository目录,这个目录我们作为本地仓库来存储相关的maven构建。

如何让它生效呢?

在maven安装成功后,在操作系统的当前用户目录下,有maven的配置文件,以我自己机器为例,路径是:C:\Users\xieyf\.m2 \settings.xml,打开该文件,找到localRepository标签,修改里边的路径为:<localRepository>d:/maven/mavenRepository/</localRepository>

?

到此为止,maven在本地的安装就完成了,下边章节我们继续讨论maven如何使用。

?

上一篇文章(maven(一)——maven的介绍与安装),我们介绍了maven的相关基础知识和如何在本地安装部署maven。今天,我们来讨论下如何在Myeclipse环境中通过maven来管理和配置项目,以及如何在tomcat中部署并发布、打包项目。

其实最原始的方法,maven通过命令行就可以来创建、配置、运行、发布、打包项目,咱们这次先不讲命令行的方式,直接说在Myeclipse中来操作。因为目前对于我们开发者来说,绝大多数还是在IDE(包括Myeclipse等)中来操作的。

好,废话不说,开始正文

先说一下我的环境:Myeclipse8.5,Jdk1.6.0_14,maven2.2.1

1.Myeclipse安装maven插件

很高兴的看到,Myeclipse本身已经内置了maven的插件,咱们就不需要单独安装了,唯一需要修改的是Myeclipse中使用的maven版本,不管Myeclipse使用的是哪个版本,咱们都统一改成刚才下载到本地安装的版本,方法是:

    菜单依次进入:windows–>Ppreferences–>MyEclipse–>Mave4MyEclipse–>Maven–>Installations增加本地的maven到MyEclipse中Myeclipse停通过maven管理项目修改setting.xml文件Myeclipse停通过maven管理项目

到此,MyEclipse的maven环境配置完成。

2.创建maven项目

开始创建maven项目,步骤

    MyEclipse中依次:New–>Other–>Maven–>Maven Project,然后下一步使用默认工作空间的路径Myeclipse停通过maven管理项目接着下一步选择模板,一定要选择maven-archetype-webapp,这表明是在创建一个web工程,如果要创建普通java工程,则选择maven-archetype-quickstartMyeclipse停通过maven管理项目接着下一步填写项目的相关信息,点击完成Myeclipse停通过maven管理项目项目就创建完成了,目录结构如下Myeclipse停通过maven管理项目我们知道,maven对项目的结构是有一套默认的规则的,现在生成的这个结构中还不完整,我们需要手工再增加一些,如下图Myeclipse停通过maven管理项目配 置项目属性,都是细节配置而且很重要:a)项目邮件菜单–>属性–>Java Build Path–>Source,点add folder,添加src/main/java, src/test/java, src/test/resources为source folder ? ? ? b)下边的default output folder修改为:helloworld/src/main/webapp/WEB-INF/classes ? ? c)修改这些source folder的输出目录,其中main/java和main/resources输出到default output folder, 而test/java和test/resources输出到target/test-classes中,(如何修改—点击各节点下的Output Folder, 再点右边的edit按钮就行了)最后设置结果如下:Myeclipse停通过maven管理项目 d)Order And Export,为了显示好看,调整一下显示顺序,如图所示:Myeclipse停通过maven管理项目 e)Libraris,修改jdk为本机的1.6.0_14,如下图:Myeclipse停通过maven管理项目如果在settings.xml中的profiles标签中添加:<profile>
    <id>jdk-1.6</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.6</jdk>
    </activation>
    <properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
    <maven.compiler.compilerVersion>1.6</maven.compiler.compilerVersion>
    </properties>
    </profile>

    那么MyEclipse将会默认生成jdk1.6的项目

    到此为止,配置完毕,最后的项目结构:Myeclipse停通过maven管理项目
3.项目运行

传统的方法,我们需要先去下载一个tomcat到本地,然后将项目发布到该tomcat中。使用maven后,tomcat都不用下载了,可以使用maven的内嵌tomcat,很方便,方法如下:

步骤:

    打开MyEclipse的debug配置,依次打开菜单:Run-Debug Configerations tomcat:run 或 jetty:run增加helloworld项目的配置Myeclipse停通过maven管理项目运行helloworld访问:http://ip:8080/helloworld,能看到Hello World的字样Myeclipse停通过maven管理项目神奇吧,就这样就搞定了,可以开发调试了
4.项目打包、发布

这个更简单,在项目的任何一个文件中点击右键:Run As–>Maven Package,看看在target目录下,是不是已经生成了helloworld.war?

?

2.2安装

下载完,解压缩后可以看到两个文件夹,一个是nexus-2.0.6,另一个是sonatype-work,我们只需要将nexus-2.0.6拷贝到需要安装的路径即可,比如在我的机器上,我copy到了D:\maven目录下,sonatype-work可以不拷贝。

很简单,这就安装完了。

2.3启动

nexus已经将各个平台的启动脚本都写好了,并分开目录放置,具体可以查看nexus-2.06\bin\jsw目录,我的机器是 windows32位的,就可以进入到windows-x86-32目录下,点击console-nexus.bat即可启动,启动完成后,访问 url:http://localhost:8081/nexus即可看到nexus的页面Myeclipse停通过maven管理项目如果是其他平台,找到对应的目录启动脚本即可。

?

到这里为止,我们的nexus就已经启动起来了,下一节,我们来讨论一下如何配置nexus。

左侧分为4部分,其中views/repositories是仓库相关的管理项;security是安全权限相关的;administrotr是管理相关的;help是帮助相关的。

由于nexus提供的功能相当强大,咱们这篇文章只描述里边平时用的比较多的且较重要的部门说明,其余的可能会一笔带过或者忽略掉。

1.仓库配置1.1仓库浏览

点击左侧的“views/repositories–>repositories”,右边列出来了nexus默认的仓库Myeclipse停通过maven管理项目其中有四种类型的仓库,分别是hosted、proxy、virtual、group

    hosted,宿主型的,实实在在由nexus给管理的仓库,nexus自带了3个宿主仓库Myeclipse停通过maven管理项目proxy,代理型的,每个仓库都是对一个远程仓库的代理,这其中就包括了对中央仓库的代理Myeclipse停通过maven管理项目virtual,虚拟型的,这个不太了解,就不说了group, 严格来说它不是一个仓库,顾名思义,是组的意思,它相当于是由多个仓库合成了一个组,由该组的url对外提供服务,nexus默认有两个组,一个是 public group,其中包含了上边的3个宿主仓库和中央仓库;另一个是public snapshots group,里边包含了Apache Snapshots和CodeHaus Sanpshots。当然这些组包含的内容是可以修改的。
同时,nexus提供了增加、删除、修改仓库定义的功能。1.2打开远程索引下载

上一篇文章咱们也提到了,巨大的用户访问中央仓库会带来巨大的网络压力和服务器压力,因此在nexus中默认的各个代理仓库的索引都是关闭状态,即 安装完nexus后里边是空的,什么东东都没有,包括索引。我们现在要做的就是需要把这个索引给下载到nexus服务器中,以便使用者可以从nexus中 搜索到相关构建。

方法如下:

    选中中央仓库这条记录,即名字为central的仓库Myeclipse停通过maven管理项目下边选中configuration选项卡,找到其中的Download Remote Indexes,把fasle改为true,并保存在上边的中央仓库记录上点击右键,选择update indexMyeclipse停通过maven管理项目下载完成后Myeclipse停通过maven管理项目然后在下边选中Browse Index选项卡,打开central这颗树的节点,应该能看到内容。在下载索引之前是空的。
其他的proxy类型的仓库,都可以用同样的方法来下载索引。注意:这一步仅仅是下载了远程仓库的索引,真正的构件还没有下载到nexus中。等真正有实际用户使用这些构件的时候,才会从中央仓库下载真是的构件文件。1.3搜索构件

在使用maven之前,如果我们 的项目中需要使用一个jar包,我们一般会怎么做呢?举个例子,我们要使用dom4j这个包,那么我们一般要去官方网站下载或者去baidu、 google里边直接搜索,版本呢只能逮到哪个是哪个了。这种情况如果找一个两个jar还行,如果多了将会带来巨大的工作量,而且还非常容易导致缺包、冲 突等问题。

现在有了maven,工作将会变的非常简单。还拿找dom4j这个jar来举例子,在nexus的页面中搜索“dom4j”这个词,看如下结果Myeclipse停通过maven管理项目左 侧的搜索框输入了dom4j,右侧上方出现了所有包含dom4j的项目,加入我们需要1.6.1版本的dom4j的jar,那么点击相应的条目在下方就会 列出来。搜索到之后怎么用呢?右侧给出了依赖xml格式的数据,只需要将该xmlcopy到你的pom.xml中,那么你的项目将会自动从nexus下载 (注:项目中配置nexus的方法还没说,下一篇文章细说)。

说到这里,可能会有疑问,那假如说我的项目需要A.jar,但是A.jar又依赖B.jar,那我是不是还要依次去找所有的依赖jar呢?答案是否 定的,maven已经给你提供了最简单的方法,只要你依赖了A.jar,那么A.jar所需要的所有jar它将自动帮你查找下载。怎么样,省事了很多吧。

1.4创建仓库

我们来做一个创建proxy类型的仓库,点击仓库里边上方的“Add….—>Proxy Repository”Myeclipse停通过maven管理项目Myeclipse停通过maven管理项目 ?Id是唯一的,输入一个名字,Remote Storage Location输入jboss的maven仓库地址,下边的代理相关的设置根据自己的情况来确定,输入完后点击保存即可。创建完成后按照1.2节提供的方法下载索引即可。

1.5组管理

组是若干仓库的一个集合,那么如何来管理组中包含的仓库呢?看下图:Myeclipse停通过maven管理项目选中public group这条记录,选中下方的configuration选项卡,左侧列出了已经选择的仓库列表,右边是可选的,通过中间的箭头来控制仓库列表信息。

2.安全相关

主要是对nexus中资源的授权管理。

    security–>Change Password,修改当前用户的密码;security–>Privilege,权限点管理;security–>Roles,角色管理;security–>Users,用户管理
这几项都是标准的权限管理,很简单,就不再多说了。3.管理相关3.1代理设置

如果nexus服务器上网需要设置代理,那么需要在Administrator–>Server中设置,如下图所示:Myeclipse停通过maven管理项目

?

大概说了这么多,都是比较常用的,后续有什么变化,再继续添加。

??onlinestore (42.5 KB, 66 点击)

1.项目描述

我们先从这个项目开始说起。onlinestore是一个主项目,onlinestore-core、onlinestore-interf、 onlinestore-chinaweb、onlinestore-americaweb是onlinestore的4个子项目(其中前两个是java 项目,后边两个是web项目)。在这里说子项目,可能大家还有些不太习惯或者不太好理解,这个子与父的关系,我们在后边会再说。注意:这里我起的在线商店 这个项目,里边没有什么实质性的代码,只是想的框架和主要的配置文件。下边截图是这几个项目的工程结构图:Myeclipse停通过maven管理项目在图中我们可以看到父项目和子项目在MyEclipse里边是平级的关系,在磁盘的目录结构中,子项目在父项目所在的文件夹中,如下图:Myeclipse停通过maven管理项目其实在这两个截图中,都看不出里边的父子关系,真正的父子关系,在哪里定义呢?在pom.xml文件中,我们打开父项目的pom.xml文件,里边可以找到:

<modules>
<module>onlinestore-core</module>
<module>onlinestore-interf</module>
<module>onlinestore-chinaweb</module>
<module>onlinestore-americaweb</module>
</modules>

另外,在4个子项目的pom.xml的文件中,也能找到类似的:

<parent>
<artifactId>parent</artifactId>
<groupId>com.uuwit.onlinestore</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>

也就是说,在父项目和子项目中,都有说明他们之间的关系。

说到这里,咱们说一下为什么要创建父项目和子项目,他们之间到底有着什么样的联系。通常一个大的项目会将项目分成多个模块,比如上边咱们举的例 子,core是项目的一些核心类或者组件,interf放接口类,其余两个分别是两个相对独立的web模块。正常情况下,两个web模块比如会依赖 core和interf这两个项目。而两个web项目之间通常并不会有依赖关系,但是他们之间却有很多共性的东西,比如说很多类似的配置、很多类似的 jar包等等,这时候父项目和子项目的优势就能体现出来了。我们知道maven父项目和子项目的pom.xml是有继承关系的,也就是说各个模块相同的部 分,我们可以配置到父项目的pom.xml文件中,这样子项目中的pom.xml只放自己个性的东西就可以了,这大大减少了工作量。另外,在编译和打包等 其他阶段,都可以统一在父项目中来进行,maven会自动操作其中的子项目,提高了效率。

【注意:】事实上,所有的maven项目都会继承一个超级pom,这个pom就是%M2_HOME%\lib\maven-2.2.1-uber.jar中的org\apache\maven\project\pom-4.0.0.xml。

2.配置nexus

我们知道,我们假设仓库管理器的目的是为了减少与中央仓库的交互,既然这样,那我们在本地肯定要配置nexus的相关信息,以便能够把中央仓库的配置覆盖掉,从而真正来使用nexus。

两个步骤:

1.打开settings.xml文件:

<mirrors>
<!– mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
–>
<mirror>
<id>nexus-public-snapshots</id>
<mirrorOf>public-snapshots</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public-snapshots</url>
</mirror>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
</mirrors>

找到mirrors标签,在其中添加上边的配置,其中的localhots:8081根据自己的具体情况修改。

2.打开父项目的pom.xml文件,添加如下配置:

<distributionManagement>
<repository>
<id>repo</id>
<name>public</name>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshots</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>

</distributionManagement>

其中的localhots:8081根据自己的具体情况修改。

好了,就这么简单,就配置好了,如何验证一下项目真的不去找中央仓库的麻烦了呢?可以这么测试一下,你把你项目中使用到的一些构件在本地的 maven仓库删除掉,然后再编译一下项目,在控制台打印的日志中,你能够清晰的看到都是从nexus中downlaod的,而在之前都是打印从中央仓库 获取的。

3.java项目的几个操作3.1编译

mvn compile,编译java项目,java文件将会被编译成class文件放到target/classes目录下

3.2打包

mvn package,打包java项目,项目将会打包成jar文件放到target目录下,jar文件的命名规则是:${project.artifactId}-${project.version}.jar

cmd 进入到有oracle包ojdbc6的目录

mvn?install:install-file?-DgroupId=com.oracle?-DartifactId=oracle?-Dversion=11.2 -Dpackaging=jar?-Dfile=ojdbc6.jar

pom.xml中添加

<dependency>
?? ??? ?<groupId>com.oracle</groupId>
?? ??? ?<artifactId>oracle</artifactId>
?? ??? ?<version>11.2</version>
?? ?</dependency>

3.3安装

安装的作用是将打包好的jar文件安装到本地的mavan仓库中,以供其他项目(如果其他项目依赖该项目的话)使用。

mvn install,在maven仓库中存放的目录结构是:${project.groupId}–>${project.artifactId}–>${project.version}

3.4部署

部署的作用是将打包好的jar文件上传到nexus中,以供其他同伴(如果其他同伴依赖该项目的话)使用。

mvn deploy,在这里要注意,在部署的时候,会提示401错误,此时你需要在setting.xml文件中添加鉴权信息,即在部署的时候需要使用nexus给分配的账户来上传。

在settings.xml中找到servers标签,在其中添加如下配置:

<server>
<id>repo</id>
<username>admin</username>
<password>admin123</password>
</server>

<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>

其中的用户名和密码是nexus分配的,其中的id一定要和父项目中pom.xml文件中刚才配置的repository和rnapshotRepository的id一致。

4.web项目的几个操作

先贴一下web项目的pom.xml的build标签:

<build>
<finalName>onlinestore-chinaweb</finalName>
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<!–
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
<argLine>-Dfile.encoding=UTF-8</argLine>
<skip>true</skip>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>maven</groupId>
<artifactId>maven-clover-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
–>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
<warName>onlinestore-chinaweb</warName>
<attachClasses>true</attachClasses>
<classesClassifier>classes</classesClassifier>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webappDirectory>${project.build.directory}/onlinestore-chinaweb
</webappDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<charset>${project.build.sourceEncoding}</charset>
<url>http://localhost:8080/manager</url>
<!– <server>tomcat.server</server> –>
<path>/onlinestore-chinaweb</path>
<port>8080</port>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warFile>${project.build.directory}/onlinestore-chinaweb.war</warFile>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>

</configuration>
</plugin>
</plugins>
</build>

4.1全局配置
    outputDirectory要重新指定,指定到src/main/webapp/WEB-INF/classes目录下,否则默认会是在test/classes目录
4.2war插件

配置比较简单,不再累述。

4.3tomcat插件

tomcat插件可以让你不使用外部的tomca,而使用起内嵌的tomcat,这样更省劲,更简单。如果你不想使用内嵌的tomcat,也可以单 独指定,需要在<configuration>标签中指定tomcat的server的id,这个id也需要在settings.xml中的 servers标签中定义。

其中的tomcat端口可以自己指定。

热点排行