Maven 实战 阅读 摘要

最近拜读了许晓斌的<<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实战-有书签.pdf

2014年03月11日 38.97MB 下载

Maven实战Maven实战

2017年11月28日 40.24MB 下载

Maven实战完整高清版.pdf

2018年03月08日 40.25MB 下载

Maven实战 带目录

2017年09月08日 36.93MB 下载

Maven实战 完整版

2018年04月08日 34.86MB 下载

maven实战pdf版

2018年04月10日 36.93MB 下载

没有更多推荐了,返回首页

不良信息举报

Maven 实战 阅读 摘要

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭