关闭

Maven 实战 阅读 摘要

标签: mavenjavapluginspropertiesjarurl
483人阅读 评论(0) 收藏 举报
分类:

最近拜读了许晓斌的<<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中激活集成测试

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:126123次
    • 积分:1700
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:205篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论