Maven 实战 阅读 摘要

转载 2012年03月23日 16:31:27

最近拜读了许晓斌的<<Maven 实战>> ,这篇文章是个人的学习摘要,作回顾用。
大家有兴趣的话,这里有些样章下载:http://www.juvenxu.com/mvn-in-action/

1.下载地址&仓库&插件

下载地址:http://maven.apache.org/download.html

中央仓库:  http://repo1.maven.org/maven2/
中央仓库中国镜像:http://maven.net.cn/content/groups/public
Java.net :http://download.java.net/maven/2/
JBoss: http://repository.jboss.com/maven2/

定义本地仓库:~/.m2/setting.xml

Java代码 复制代码 收藏代码
  1. <settings>   
  2.    <localRepository>D:/.....</localRepository>   
  3. </settings>  
  1. <settings> <localRepository>D:/.....</localRepository> </settings>  



配置远程仓库:pom.xml中

Java代码 复制代码 收藏代码
  1. <respositories>   
  2.    <repository>   
  3.       <id>jboss</id>   
  4.       <name>JBoss Repository</>   
  5.       <url>http://repository.jboss.com/maven2/</url>   
  6.       <releases>//发布版本下载控制   
  7.           <enabled>true</enabled>   
  8.          <updatePolicy>daily</updatePolicy>   
  9.       </releases>   
  10.       <snapshots>//快照版本下载控制   
  11.     <enabled>false</enabled>   
  12.     <updatePolicy>daily</updatePolicy>//下载间隔,可选 daily, never, always//每次构建都检查, interval:x //每隔x分钟检查一次更新   
  13.        </snapshots>   
  14.       <layout>default</layout>   
  15.    </repository>   
  16. </respositories>  
  1. <respositories> <repository> <id>jboss</id> <name>JBoss Repository</> <url>http://repository.jboss.com/maven2/</url> <releases>//发布版本下载控制 <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <snapshots>//快照版本下载控制 <enabled>false</enabled> <updatePolicy>daily</updatePolicy>//下载间隔,可选 daily, never, always//每次构建都检查, interval:x //每隔x分钟检查一次更新 </snapshots> <layout>default</layout> </repository> </respositories>  



pom.xml远程部署配置

Java代码 复制代码 收藏代码
  1. <distributionManagement>   
  2.    <repository>   
  3.      <id>***</id>//远程仓库id   
  4.      <name>***</name>//方便阅读   
  5.       <url>***</url>   
  6.    </respository>   
  7.    <snapshotRepository>   
  8.      <id>***</id>//远程仓库id   
  9.      <name>***</name>//方便阅读   
  10.       <url>***</url>   
  11.    </snapshotRepository>   
  12. </distributionManagement>  
  1. <distributionManagement> <repository> <id>***</id>//远程仓库id <name>***</name>//方便阅读 <url>***</url> </respository> <snapshotRepository> <id>***</id>//远程仓库id <name>***</name>//方便阅读 <url>***</url> </snapshotRepository> </distributionManagement>  



setting.xml中配置认证信息

Java代码 复制代码 收藏代码
  1.                
  2. <servers>   
  3.    <server>   
  4.      <id>my-proj</id>//对应远程仓库id   
  5.      <username>***</username>   
  6.      <password>***</password>   
  7.    </server>   
  8. </servers>  
  1. <servers> <server> <id>my-proj</id>//对应远程仓库id <username>***</username> <password>***</password> </server> </servers>  


镜像配置: setting.xml中,所有的请求都会转发到镜像中

Java代码 复制代码 收藏代码
  1.                    
  2. <mirrors>   
  3.   <mirror>   
  4.     <id>***</id>   
  5.     <name>***</name>   
  6.     <url>***</url>   
  7.     <mirrorOf>central</mirrorOf>//仓库id,这里表示是中央仓库的镜像,如果是*则表示转接所有远程仓库请求,也可以多个,中间用逗号隔开:repo1,repo2   
  8.  //*,!repo1 , 所有远程仓库除repo1外   
  9.    </mirror>   
  10. </mirrors>  
  1. <mirrors> <mirror> <id>***</id> <name>***</name> <url>***</url> <mirrorOf>central</mirrorOf>//仓库id,这里表示是中央仓库的镜像,如果是*则表示转接所有远程仓库请求,也可以多个,中间用逗号隔开:repo1,repo2 //*,!repo1 , 所有远程仓库除repo1外 </mirror> </mirrors>  



仓库搜索工具
Sonatype Nexus : http://repository.sonatype.org/
Jarvana : http://www.jarvana.com/jarvana/
MVNbrowser: http://www.mvnbrowser.com
MVNrepository: http://mvnrepository.com/

插件信息:
http://maven.apache.org/pugins/index.html  http:////mojo.codehaus.org/plugins.html
                        
有用插件:
Maven Release Plugin 版本发布;
cargo-maven2-plugin 自动化部署;
jetty-maven-plugin web测试;
maven-gpg-plugin, GPG:http://www.gnupg.org/download/ 给maven构件加密        hkp://pgp.mit.edu 美国麻省理工大学公钥服务器
maven-surefire-plugin: 单元测试,集成测试
maven-site-plugin:生成站点 //mvn site
maven-javadoc-plugin
maven-jxr-plugin:在生成站点时配置该插件,会以Web页面的形式将Java源代码展现出来
maven-checkstyle-plugin
maven-pmd-plugin:分析Java源代码,查找代码中的问题
maven-changelog-plugin
cobertura-maven-plugin

私服工具: Archiva 开源; Artifactory 核心开源; Nexus 核心开源, 专业版本需要购买
                     
2.环境变量:
M2_HOME
path:%M2_HOME%/bin
MAVEN_OPTS  -Xms128m -Xmx512m 增加jvm内容,优化Maven运行,Maven一般需要较大内存

3.常用命令:

Java代码 复制代码 收藏代码
  1. mvn -v    
  2. mvn help:system   
  3. mvn clean compile   
  4. mvn clean package  
  5. mvn clean test   
  6. mvn clean deploy //部署到版本仓库   
  7. mvn clean install //使其他项目使用这个jar,会安装到maven本地仓库中   
  8. mvn archetype:generate //创建项目架构   
  9. mvn dependency:list //查看已解析依赖   
  10. mvn dependency:tree   
  11. mvn dependency:analyze   
  12. mvn install -Dmaven.test.skip=true// -D 参数的使用,这里是跳过test阶段   
  13. -am, --also-make :同时构建所列模块的依赖模块     
  14. -amd -also-make-dependents 同时构建依赖于所列模块的模块 mvn clean install -pl account-parent -amd -rf account-email   
  15. -pl, --projects <arg> 构建指定的模块,模块间用逗号分隔 mvn clean install -pl account-email,account-persist   
  16. -rf -resume-from <arg> 从指定的模块回复反应堆  mvn clean install -rf account-email   
  17. mvn help:active-profiles :查看当前激活的profiles   
  18. mvn help:all-profiles : 查看所有profiles   
  19. mvn help:effective -pom 查看完整的pom信息  
  1. mvn -v mvn help:system mvn clean compile mvn clean package mvn clean test mvn clean deploy //部署到版本仓库 mvn clean install //使其他项目使用这个jar,会安装到maven本地仓库中 mvn archetype:generate //创建项目架构 mvn dependency:list //查看已解析依赖 mvn dependency:tree mvn dependency:analyze mvn install -Dmaven.test.skip=true// -D 参数的使用,这里是跳过test阶段 -am, --also-make :同时构建所列模块的依赖模块 -amd -also-make-dependents 同时构建依赖于所列模块的模块 mvn clean install -pl account-parent -amd -rf account-email -pl, --projects <arg> 构建指定的模块,模块间用逗号分隔 mvn clean install -pl account-email,account-persist -rf -resume-from <arg> 从指定的模块回复反应堆 mvn clean install -rf account-email mvn help:active-profiles :查看当前激活的profiles mvn help:all-profiles : 查看所有profiles mvn help:effective -pom 查看完整的pom信息  



4.配置代理:
ping repo1.maven.org 
如果需要使用代理:~/.m2/settings.xml (可以从M2_HOME/conf/settings.xml复制,这里是用户级别的配置,升级不受影响。前者是全局配置,升级会受影响)
增加

Java代码 复制代码 收藏代码
  1. <proxies>   
  2.    <proxy>  可以有多个proxy,默认使用第一个   
  3.        <id>my-proxy</id>   
  4.       <active>true</active>   
  5.       <protocol>http</protocol>   
  6.       <host>218.14.227.197</host>   
  7.       <!--   
  8.       <username>***</username>   
  9.       <password>***</password>   
  10.       <nonProxyHosts>repository.mycom.com |*.google.com</nonProxyHosts>   哪些主机不需要代理   
  11.                                     -->   
  12.     </proxy>   
  13. </proxies>  
  1. <proxies> <proxy> 可以有多个proxy,默认使用第一个 <id>my-proxy</id> <active>true</active> <protocol>http</protocol> <host>218.14.227.197</host> <!-- <username>***</username> <password>***</password> <nonProxyHosts>repository.mycom.com |*.google.com</nonProxyHosts> 哪些主机不需要代理 --> </proxy> </proxies>  



5.eclipse maven插件:
http://m2eclipse.sonatype.org/sites/m2e
注意:插件的maven可能和本机安装的不一样,最好指定本地的. Windows-Preferences  Maven-Installation

6.历史原因,compiler插件默认只支持编译Java1.3,因为需要配置该插件使其支持Java5

Java代码 复制代码 收藏代码
  1.   
  2. <project>   
  3.   ...   
  4.     <build>   
  5. <plugins>   
  6.     <plugin>   
  7.       <groupId>org.apache.maven.plugins</groupId>   
  8.       <artifactId>maven-compiler-plugin</artifactId>   
  9.       <configuration>   
  10.     <source>1.5</source>   
  11.     <target>1.5</target>   
  12.        </configuration>   
  13.      </plugin>   
  14. </plugins>   
  15.     </build>   
  16.   ...   
  17.  </project>  
  1. <project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> ... </project>  



7.为了生成可执行的jar文件,需要借助maven-shade-plugin,配在plugins中最下方

Java代码 复制代码 收藏代码
  1. <groupId>org.apache.maven.plugins</groupId>   
  2. <artifactId>maven-shade-plugin</artifactId>   
  3. <version>1.2.1</version>    
  4. <executions>   
  5.     <execution>   
  6.         <phase>package</phase>   
  7.         <goals>   
  8.             <goal>shade</goal>   
  9.         <goals>   
  10.         <configuration>   
  11.             <transformers>   
  12.                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">   
  13.                 <mainClass>com.......HelloWorld</mainClass>   
  14.             <transformers>   
  15.         </configuration>   
  16.     </execution>   
  17. <executions>  
  1. <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> <goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.......HelloWorld</mainClass> <transformers> </configuration> </execution> <executions>  



8.classpath & 依赖范围:   编译classpath , 测试classpath , 运行classpath
   依赖范围: compile(默认值), test, provided(对运行时无效,如servlet-api,最终打包时不会被打入), runtime,
                 import:该依赖范围不会对三种classpath产生实际影响
                 system(慎用,和provided依赖范围相同,此类依赖不通过Maven 仓库解析,往往和本机系统绑定,可以造成构建的不可移植)

9.依赖调解
  路径最近者优先
  路径相同者,第一声明者优先

10.生命周期 
a.clean : pre-clean,clean,post-clean
b.default:validate, initialize,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-paceage,package,pre-integration-test,integration-test,post-integration-test
                verify,install,deploy
c.site:建立和发布站点. pre-site,site,post-site,site-deploy

  绑定插件到生命周期某个阶段pom.xml

Java代码 复制代码 收藏代码
  1.      
  2. <build>//这里是绑定打源代码jar包到verify阶段   
  3.   <plugins>   
  4.     <plugin>   
  5.       <groupId>org.apache.maven.plugins</groupId>   
  6.       <artifactId>maven-source-plugin</artifactId>   
  7.       <version>2.1.1</version>   
  8.       <executions>   
  9.     <execution>   
  10.        <id>attach-sources</id>   
  11.        <phase>verify</phase>   
  12.        <goals>   
  13.          <goal>jar-no-fork</goal>   
  14.        <goals>   
  15.          </execution>   
  16.        </executions>   
  17.      </plugin>   
  18.    </plugins>   
  19.  </build>  
  1. <build>//这里是绑定打源代码jar包到verify阶段 <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.1</version> <executions> <execution> <id>attach-sources</id> <phase>verify</phase> <goals> <goal>jar-no-fork</goal> <goals> </execution> </executions> </plugin> </plugins> </build>  



11.聚合&继承   
聚合:聚合模块通常放在项目目录的最顶层,其pom.xml中 packageing 属性必须为pom
继承:子模块中pom.xml parent写法

Java代码 复制代码 收藏代码
  1.               
  2. <parent>   
  3.   <groupId>***</groupId>   
  4.   <artifactId>***</artifactId>   
  5.   <version>***</version>   
  6.   <relativePath>../account-parent/pom.xml</relativePath>//父模块pom.xml位置,默认为../pom.xml   
  7. </parent>  
  1. <parent> <groupId>***</groupId> <artifactId>***</artifactId> <version>***</version> <relativePath>../account-parent/pom.xml</relativePath>//父模块pom.xml位置,默认为../pom.xml </parent>  



可被继承的pom元素: groupId, version, description, organization, inceptionYear, url //项目的url地址
developers, contributors, disributionManagement //项目的部署配置, issueManagement, ciManagement, scm// 项目版本控制信息
mailingLists //项目的邮件列表信息, properties , dependecies, repositories, dependencyManagement, build, reporting

在父pom中声明 dependencyManagement 中的依赖不会实际引入jar包,只有在子pom中声明了相应的dependency才会实际引入,这样的好处在于控制引入jar包的版本信息
子pom中不需要声明版本信息. 当然也可以在父pom中将dependencies 中的dependency scope 声明为import, type必须为pom,达到相同效果
           
12.Maven 属性 & Profile

内置属性: ${basedir}项目根目录; ${version} 项目版本号

Pom属性: ${project.artifactId}, ${project.build.sourceDirectory}, ${project.build.testSourceDirectory},${project.build.directory}, ${project.outputDirectory}, ${project.testOutputDirectory}, ${project.groupId}, ${project.version}, ${project.build.finalName}

自定义属性
Settings: ${settings.localRepository} ,引用settings.xml文件中的XML元素的值

Java系统属性: ${user.home}
环境变量属性: ${env.JAVA_HOME}

注意:默认情况下,maven属性只能被pom文件解析,如果要在项目中使用,需要额外配置

Java代码 复制代码 收藏代码
  1.       
  2.  <profiles>   
  3.     <profile>   
  4.         <id>dev</id>   
  5.         <properties>   
  6.             <db.driver>com.mysql.jdbc.Driver</db.dirver>   
  7.             <db.url>jdbc:mysql://***</db.url>   
  8.             <db.username>***</db.username>   
  9.             <db.password>***</db.password>   
  10.         </properties>   
  11.     </profile>   
  12.    </profiles>   
  13. ...   
  14.    <resources>   
  15.     <resource>   
  16.         <directory>${project.basedir}/src/main/resources</directory>   
  17.         <filtering>true</filtering>//是否启用过滤   
  18.     </resource>   
  19.    </resources>    
  20.         
  21. ...   
  22.     mvn clean install -Pdev //这里也可以激活多个profile,中间用逗号隔开   
  23.     mvn clean install -Pdev1,dev2  
  1. <profiles> <profile> <id>dev</id> <properties> <db.driver>com.mysql.jdbc.Driver</db.dirver> <db.url>jdbc:mysql://***</db.url> <db.username>***</db.username> <db.password>***</db.password> </properties> </profile> </profiles> ... <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering>//是否启用过滤 </resource> </resources> ... mvn clean install -Pdev //这里也可以激活多个profile,中间用逗号隔开 mvn clean install -Pdev1,dev2  




如果要某个profile默认一直处于激活状态,settings.xml

Java代码 复制代码 收藏代码
  1.      
  2. <settings>   
  3. ...   
  4. <activeProfiles>   
  5.     <activeProfile>dev1</activeProfile>   
  6. </activeProfiles>   
  7. ...   
  8.    </settings>  
  1. <settings> ... <activeProfiles> <activeProfile>dev1</activeProfile> </activeProfiles> ... </settings>  



系统属性激活

Java代码 复制代码 收藏代码
  1.      <profiles>   
  2. <profile>   
  3.     <activation>   
  4.         <property>   
  5.             <name>test</name>   
  6.             <value>x</value> //可选,加上则表示test=x时才激活, mvn clean install -Dtest=x   
  7.         </property>   
  8.     </activation>   
  9. </profile>   
  10.   </profiles>  
  1. <profiles> <profile> <activation> <property> <name>test</name> <value>x</value> //可选,加上则表示test=x时才激活, mvn clean install -Dtest=x </property> </activation> </profile> </profiles>  



操作系统激活

Java代码 复制代码 收藏代码
  1.      <profiles>   
  2. <profile>   
  3.     <activation>   
  4.         <os>   
  5.             <name>Windows XP</name>   
  6.             <family>Windows</family>   
  7.             <arch>x86</arch>   
  8.             <version>5.1.2600</version>   
  9.         </os>   
  10.     </activation>   
  11. </profile>   
  12.   </profiles>  
  1. <profiles> <profile> <activation> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile> </profiles>  



文件存在与否激活

Java代码 复制代码 收藏代码
  1.   
  2.     <profiles>   
  3. <profile>   
  4.     <activation>   
  5.         <file>   
  6.             <missing>x.properties</missing>   
  7.             <exists>y.properties</exists>   
  8.         </file>   
  9.     </activation>   
  10. </profile>   
  11.   </profiles>  
  1. <profiles> <profile> <activation> <file> <missing>x.properties</missing> <exists>y.properties</exists> </file> </activation> </profile> </profiles>  


  
默认激活

Java代码 复制代码 收藏代码
  1.      
  2.   <profiles>   
  3. <profile>   
  4.     <id>dev</id>   
  5.     <activation>   
  6.         <activeByDefault>true</activeByDefault>   
  7.     </activation>   
  8. </profile>   
  9.   </profiles>   
  1. <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>  


  
Profile种类
  pom.xml :只对当前项目有效
  用户settings.xml //对项目的移植可能会产生问题
  全局settings.xml //对项目的移植可能会产生问题

Maven可以对资源文件进行过滤,也可以在profile中激活集成测试

相关文章推荐

Maven实战摘要

Maven实战 pdf 1. Maven是款平台的,在windows、linux和Mac中都可以使用同样的命令; 2. Maven是一个完成标准化项目构建的构建工具,而且还是一个依...

《Maven实战》阅读笔记(四)

第六章  仓库 什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j....

《Maven实战》阅读笔记整理(二)

通过阅读前言,了解到Maven能够帮助我们更规范,更高效地管理Java项目。 很多开源项目和互联网公司开始使用Maven来管理他们的项目。 前言 前言中提到了该书的书稿是通过使用Git 和 Unf...

《Maven实战》阅读笔记(五)

第七章   生命周期与插件 Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是: ...

《Spring3实战》摘要(4-2)--Spring配置切面

4.3 在XML中声明切面 4.3.1 声明前置和后置通知 4.3.2 声明环绕通知 4.3.3 为通知传递参数 4.3.4 通过切面引入新功能 4.4 注解切面 4.4.2 传递参数给所标注的通知 ...

《Spring3实战》摘要(1)---spring简介

1.1 Spring容器 1.2.1 Spring常用的3种应用上下文 1.2.2 Spring模块 1.3.1 Spring2.5新特性 1.3.2 Spring3.0新特性 1.3.4 Sprin...

《Spring3实战》摘要(3-1)--最小化Spring XML配置之自动装配Bean属性

3.1 自动装配Bean属性 3.1.1 4种类型的自动装配 3.1.2 默认自动装配 3.1.3 混合使用自动装配和显式装配 3.2 使用注解装配 3.2.1 使用 @Autowired 3.2.2...

Apache Security-3 Digest Authentication(摘要认证)简介及实战

说明 准备工作 需要哪些模块 摘要认证Digest Authentication 1 摘要认证如何工作 2 实战 小结1. 说明本文系我的"Web Server & Web Technology (W...

Hibernate实战读书摘要(2)—领域模型和元数据

Hibernate不要求持久化类实现Serializable(可序列化)。然而,当对象被存储在一个HttpSession中,或者用RMI按值传递时,就需要序列化。(这可能发生在Hibernate应用程...

《Spring3实战》摘要(3-2)--最小化Spring XML配置之自动检测Bean

3.3 自动检查 Bean 3.3.1 为自动检测标注Bean 3.3.2 过滤组件扫描 3.4 使用 Spring 基于 Java 的配置 3.4.1 创建基于Java的配置 3.4.2 定义一个配...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Maven 实战 阅读 摘要
举报原因:
原因补充:

(最多只允许输入30个字)