一:Maven命令解释:
mvn compile:编译
mvn test:测试
mvn clean:清空,会去除掉target文件(报告文件,一些错误信息会在这里面)。
mvn package:打包(会将我们的项目打包成一个jar包这个jar包同样可以配置到pom.xml中供其他项目使用)(项目中引入模块很有用)
mvn install:将自己的项目打包放到maven仓库中,可以供其他项目引用。
//以下两项一般只有在手动创建项目时需要使用
mvn archetypes:generate会下载相应的骨架信息,自己选择所需要的骨架,然后按提示输入groupId和artifactid和版本号和包名即可完成maven项目的自动建立
这个命令也可以一次性全部使用,例如:
mvn arcgetype:generate -DgroupId=com.trs.xingcheng -DartifactId=xingcheng -Dversion=0.0.1 -SNAPSHOT
举例说明install:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 这里命名稍微有点不对:groupId一般写我们的项目加公司域名倒过来写-->
<groupId>com.trs</groupId>
<!--项目中的块文件-->
<artifactId>xingcheng</artifactId>
<version>0.0.1-SNAPSHOT</version>
以上是我的项目配置文件:
运行install之后在本地maven仓库中可以找到.com.trs.xingcheng文件夹,其中包含如下文件
(1)0.0.1-SNAPSHOT文件夹:我的项目版本:这其中包含_remote.repositories文件,xingcheng-0.0.1-SNAPSHOT.jar,xingcheng-0.0.1-SNAPSHOT.pom,maven-metadata-local.xml
解释:xingcheng-0.0.1-SNAPSHOT.pom这个文件就是你项目的pom.xml,这里面配置了所有该项目需要的包,这也就解释了maven引入某包时会将依赖的包一同导入的原因。
(2)maven-metadata-local.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.trs</groupId>
<artifactId>xingcheng</artifactId>
<versioning>
<versions>
<version>0.0.1-SNAPSHOT</version>
</versions>
<lastUpdated>20131116021813</lastUpdated>
</versioning>
</metadata>
二:maven中的隐藏名称:
${basedir}:项目根目录
${project.build.directory}:构建目录,缺省为target
${project.build.outputDirectory}:构建过程输出目录,缺省为target/classess
${project.build.finalName}产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging}打包类型,缺省为jar
${project.xxx}当前pom文件的任意节点内容,例如:想得到groupId可以${project.groupId},得到项目版本号可以使用${project.version}
使用例子:模块导入
<dependency>
<groupId>${project.groupId}</groupId>
<!--以下引入的是该项目的一个模块项目,它和当前项目属于同一项目,有相同的groupId-->
<artifactId>user-log</artifactId>
<!--当前项目的版本号-->
<version>${project.version}</version>
</dependency>
<!--以上配置可以将该日志模块项目导入到当前模块中,并且会将该项目所需要的所有依赖的包导入到当前模块。注意(引入的那个模块需要利用clean install命令打包,这样才可以利用maven的pom配置导入如果是利用clean package打包的话,引入该项目后还需手动讲该日志模块所需要的包导入的当前项目的lib文件夹中不然会由于缺少包而报错,而这样做会失去了maven管理jar包的价值,所以建议用clean install命令生成包到本地的maven仓库中)-->
三:maven的配置中的<scope></scope>详解
(1)scope的默认值是compile,指的是编译时依赖,即编译时就会将依赖包下载到maven仓库中(缺省值,适用于所有阶段,会随着项目一起发布)
(2)test:只有在测试的时候会依赖这个包,即打包的时候不会将配置为test的junit包加进去。(只在测试时使用,用于编译和运行测试代码。不会随项目发布)
test项的包只对test源文件下的类起作用,如果将junit的代码放到src下,而junit配置为test将会出现找不到junit包的错误。
(3)provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
(4)runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
(5)system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
================================================================================================================
四:传递依赖或说间接依赖:
例如:A项目依赖L项目版本1.1 直接依赖
B项目依赖L项目版本1.2 直接依赖
C项目依赖项目A和项目B 间接依赖
maven包中导入的将是先配置的项目中依赖的包,即如果项目C配置中先依赖A,再依赖B,则导入的L版本将是1.1
以上是在依赖级别相同的情况下的依赖关系,如果依赖级别不容的话,将会依赖于依赖级别高的项目。例如:A依赖D D依赖L的1.1,则C依赖L的1.2
通过这个原理可以通过在高级别中依赖新版本来屏蔽间接依赖中的旧版本。
五:排除依赖
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
注意将这对配置放在最高版本的dependency中这样就只引入最高版本的项目,而可以排除其他版本的依赖。
可以用来解决包冲突问题。
六:聚合(模块管理):
(1)模块编译的聚合:简述:当一个项目以模块的形式开发的,即每一层或每一种功能放入在一个模块中开发,例如:将dao和service和action和log等分别放在不同的开发模块中开发,这样这个
项目就由这么多模块组成,这样编译项目时每次都需要将所有模块编译一次,这样非常麻烦,为了解决这个问题我们可以在这些模块的根目录即工程目录下建立一个pom.xml文件来管理整个工程。或者利用eclipse建立一个新的maven项目,在选择package时不要选择jar和war,我们选择pom类型即可。
在新项目的pom中加上聚合配置:
<!--导入了三个模块,把这三个模块聚合在一起-->
<modules>
<module>../模块一<module>
<module>../模块二< module>
<module>../模块二< module>
</modules>
这样就只需要对这个聚合项目进行clean操作就可以完成所有模块的clean操作,操作结果时所有模块下的target下的文件都没了(注意操作后刷新模块)。
(2)a:集成:聚合模块聚合共有的pom(非dependency,是一些其他配置如properties,url)
即将各个聚合模块中共同的pom配置提取出来放到一个新的pom的maven工程中进行统一配置,再让各个模块继承该聚合模块即可。
继承配置如下:在每个模块的头部的<modelVersion></modelVersion>配置下添加如下配置:
<parent>
<groupId>项目的groupId</groupId>
<artifactId>parent</artifactId>
<version></version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
b:聚合模块聚合不共有的pom(dependency的聚合)
即可以将各个模块中的dependency放到pom管理模块中配置,在其中加上
<dependencyManagement>
<dependencies>
<!--以下放置各个模块中的dependency-->
</dependencies>
<dependencyManagement>
配置完这个后在各个模块中原有的dependency配置就只需要配置groupId和artifactId即可。
通过以上配置可看到聚合的配置很像集成,所以可以把聚合项目中的配置放到集成项目中来完成。
当然也可以将配置完后的pom直接放到工程中,这样就可以少掉一个项目,放过去之后需要改动下配置如各个子模块中的<parent>下的<relativePath>中的路径需要修改和聚合中的<modules>中<module>中的路径等。
七:版本号讲解
x.x.x里程碑的版本即有大的变化即第一个x代表的版本例如struts1和struts2,包含这些SNAPSHOT(快照版还在开发中的版本),alpha内部的测试版本,beta测试版本使用人员起初用的版本,Release版本(RC)释放版本,GA(可靠版本)。
八:仓库问题:依赖包的宁一个仓库nexus sonatype管理。这个在多个模块管理中有一定作用,没使用到,所以暂时没具体研究。好像是收费的,免费版现在不更新了,不过可以下载免费版学习下。用到了再做补充。23
九:Maven的生命周期clean compile site
1.clean包含三个步骤pre-clean执行一些需要在clean之前完成的工作,clean:移除所有上一次构建生成的文件,post-clean执行一些需要在clean之后立刻完成的工作。
2.compile:
validate
generate-sources
process-sources
generate-resources
process-resources复制并处理源文件,至目标目录,准备打包。
compile编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources复制并处理源文件,至目标测试目录
test-compile编译测试源代码
process-test-classes
test使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package接受编译好的代码,打包成可发布的格式,如JAR
pre-intergration-test
intergration-test
post-intergration-test
verify
install将包安装到本地仓库,以让其他项目依赖。
deploy将最终的包复制到远程仓库,以让其他开发人员与项目共享。
site
pom.xml详解文章推荐:http://www.blogjava.net/jianyue/articles/227932.html
springmvc+spring+hibernate+maven的pomhttp://www.myexception.cn/vc-mfc/1267158.html
MyEclipse + Maven开发Web工程的详细配置过程
好久没做Web方面的开发,今天突然想弄弄SpringMVC,因为不久前又学了点Maven觉得非常好,所以在弄SpringMVC这个Web框架时想使用Maven来做,但是问题又来了,我一直是在Eclipse中使用Maven,而我以前一直用MyEclipse做Web开发(在Eclipse中做web开发个人认为一点都没MyEclipse方便,在MyEclipse中可以直接使用Tomcat调试,很是方便),那么怎样才能既使用MyEclipse又能使用Maven呢,今天作了一翻"捣鼓",写了这篇文章。
就一步一步写来吧:
1. 使用Maven创建webapp工程----原因是使用Maven时一般需要遵循一定的目录结构,虽然也可以使用不同的目录结构,但目前还不熟悉如何修改pom.xml文件达到目的,而且修改太多默认配置对maven来说也不好。
创建方法,在一个目录下使用命令:mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp。按照提示输入相应的参数,中间过程如下:
- D:\study\workspace4>mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
- [INFO] Scanning for projects...
- ....
- [INFO] Generating project in Interactive mode
- Define value for property 'groupId': : com.xjd
- Define value for property 'artifactId': : mywebapp
- Define value for property 'version': 1.0-SNAPSHOT: :
- Define value for property 'package': com.xjd: :
- Confirm properties configuration:
- groupId: com.xjd
- artifactId: mywebapp
- version: 1.0-SNAPSHOT
- package: com.xjd
- Y: : Y
- ....
- [INFO] BUILD SUCCESS
- [INFO] -----------------------------------------
- [INFO] Total time: 1:46.199s
- [INFO] Finished at: Wed Nov 09 15:02:18 CST 2011
- [INFO] Final Memory: 6M/15M
- D:\study\workspace4>mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
- [INFO] Scanning for projects...
- ....
- [INFO] Generating project in Interactive mode
- Define value for property 'groupId': : com.xjd
- Define value for property 'artifactId': : mywebapp
- Define value for property 'version': 1.0-SNAPSHOT: :
- Define value for property 'package': com.xjd: :
- Confirm properties configuration:
- groupId: com.xjd
- artifactId: mywebapp
- version: 1.0-SNAPSHOT
- package: com.xjd
- Y: : Y
- ....
- [INFO] BUILD SUCCESS
- [INFO] -----------------------------------------
- [INFO] Total time: 1:46.199s
- [INFO] Finished at: Wed Nov 09 15:02:18 CST 2011
- [INFO] Final Memory: 6M/15M
最后在文件夹下创建了一个Maven的webapp工程,该工程的文件夹根目录下"mywebapp"(请查看上面的过程),该目录的结构为
- mywebapp
- +---pom.xml
- +---src
- +---main
- +---resources
- +---webapp
- +---index.jsp
- +---WEB-INF
- +---web.xml
- mywebapp
- +---pom.xml
- +---src
- +---main
- +---resources
- +---webapp
- +---index.jsp
- +---WEB-INF
- +---web.xml
2. 激活配置MyEclipse的Maven插件---我使用的是MyEclipse8.5,它本身就带有一个叫Maven4MyEclipse的插件,只需要激活和配置一下即可。
激活方法:window-->preference-->MyEclipse-->Maven4MyEclipse, 勾选复选框(Enable Mave4MyEclipse features)。
配置方法:就在激活方法打开的节点下,有一个Maven节点,展开这个节点,主要配置其下的两个节点,如下:
Installations: 这一个节点默认使用内置的maven,我们需要使用我们安装的maven,点"add",添加一个我们外部安装的maven即可,注意添加后就勾选上。
User Settings: 默认的是C盘用户目录下的.m2/settings.xml文件,这里要配置外部安装的maven使用的配置文件,如我使用的就是maven安装目录下的conf/settings.xml文件,选择之后别忘了点击一下,下方的"Update Settings"按钮。
3. 用MyEclipse导入Maven创建的工程:
导入有两种方法这里分步讲解:
1) 使用MyEclipse的普通工程导入,步骤如下:
1> 先打开dos,在工程根目录下(mywebapp)运行: mvn eclipse:eclipse---运行完后会发现在工程目录下多出了两个文件.classpath和.project,这是eclipse的工程文件,当然myeclipse也识别
2> 在MyEclipse中使用导入功能,选择File-->Import...-->Existing Projects into workspace,选择工程目录,导入即可
3> 关联Maven,导入后的工程只是一个普通java的工程,并不会与maven插件相关连,此时在工程上点击右键-->Maven4MyEclipse-->Enable Dependency Management,这样,这个工程就与Maven插件关联了(关联后工程根节点左上角上会有一个M的标识)。
2)使用MyEclipse中的Maven工程导入,步骤如下:
1> 在MyEclipse中使用导入功能,选择File-->Import...-->Existing Maven Projects(这里不同),选择工程目录,导入即可。---这里导入进,MyEclipse可能会联网更新索引,很慢,我们可以取消(在Progress面板中点那个大红框),这时工程导进来了,但是没有执行该有的操作,比如maven的dependcy检查等,此时进行一下第2步操作。
2> 更新一下工程配置,右键工程-->Maven4MyEclipse-->Update Project Configuration
4. 补全工程的目录结构,第1步中生成的maven工程目录是不全的,比如我们的java代码,我们的测试目录等,现手动创建,和补全为如下:
- mywebapp
- +---pom.xml
- +---src
- +---main
- +---resources
- +---java <<添加
- +---webapp
- +---index.jsp
- +---WEB-INF
- +---web.xml
- +---test <<添加
- +---resources <<添加
- +---java <<添加
- +---target <<eclipse自动添加
- +---classes <<eclipse自动添加
- +---test-classes <<eclipse自动添加
- mywebapp
- +---pom.xml
- +---src
- +---main
- +---resources
- +---java <<添加
- +---webapp
- +---index.jsp
- +---WEB-INF
- +---web.xml
- +---test <<添加
- +---resources <<添加
- +---java <<添加
- +---target <<eclipse自动添加
- +---classes <<eclipse自动添加
- +---test-classes <<eclipse自动添加
截图:
5. 增加MyEclipse的Web Project功能
到目前为止,我们仅仅是把一个Maven的webapp导入到了MyEclipse中,然而在MyEclipse中,这还仅仅是一个Java普通的Maven工程,这一步我们就要为其添加MyEclipse的web project特性。
选择工程-->MyEclipse-->Project Capabilities-->Add Web Project Capabilites,弹出窗口中设置参数如下,再接下来的弹出窗口中选择yes。这样我们的工程就是web工程了(注意工程图标有变化,而且MyEclipse自动依赖了JEE的包)。
6. 配置工程属性,打开工程属性面板---这一步很重要,都是些细节配置,缺一不可啊
1) Java Build Path
1> Source
添加src/main/java, src/test/java, src/test/resources为source folder, 这里就不需要详述了吧,点"add folder"就行。
最小面的"default output folder"修改为"mywebapp/src/main/webapp/WEB-INF/classes"---这点很重要
修改这些source folder的输出目录,其中main/java和main/resources输出到default output folder, 而test/java和test/resources输出到target/test-classes中,(如何修改---点击各节点下的Output Folder, 再点右边的edit按钮就行了)最后设置结果如下:
2> Order And Export
为了显示好看,调整一下显示顺序,不细说了,很简单,看下图:
2)Java Compiler
注意到上面的图片中,我的工程显示jdk为1.4,所以要修改成我们想要的版本,这里就不详述了,应该都会改。