maven Maven使用

Maven使用(以新游戏大厅为例)

命名:

<groupId>cn.onlinepc.项目组</groupId>
<artifactId>项目名称</artifactId>
<version>版本</vernsion>

添加依赖:
所谓依赖就是开始时候所需要的包

	<dependency>
	  <groupId>org.springframework</groupId>
	  <artifactId>spring-web</artifactId>
	  <version>3.0.6.RELEASE</version>
	</dependency>

添加中心库: 所谓中心库就是包存放的地方或者是代理的地方

	<repository>
	    <id>gamehall</id>
	    <name>Repository hosting the gamehall</name>
	    <url>http://192.168.75.11:8080/nexus-webapp-1.9.2.3/content/groups/public</url>
	    <releases>
		<enabled>true</enabled>
		<updatePolicy>never</updatePolicy>
		<checksumPolicy>warn</checksumPolicy>
	    </releases>
	    <snapshots>
		<enabled>false</enabled>
	    </snapshots>
	    <layout>default</layout>
	</repository>

添加依赖包时,只需要添加你所需要的那个依赖包就可以了,这个依赖包的相关依赖可以不用加,maven默认会自动帮我们加好


添加自己依赖包时,可以上传到本地仓库,也可以上传到nexus,下面是一个例子

mvn install:install-file -Dfile=fckeditor-java-core-2.6.jar -DgroupId=fckeditor-java-core 
-DartifactId=fckeditor-core -Dversion=2.6 -Dpackaging=jar -DgeneratePom=true

当然nexus提供界面操作上传
maven上传到nexus

 mvn deploy:deploy-file -DgroupId=org.apache.hadoop  -DartifactId=hbase -Dversion=1.0 
-Dpackaging=jar -Dfile=[path to file] -Durl=[url] -DrepositoryId=[id]

公司内部需要走代理访问外部的,所以在设置的时候也要加上代理 修改setting.xml文件

    <proxy>
      <id>onlinepc</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>192.168.11.254</host>
      <port>8080</port>
    </proxy>

当然一些模块化的结构管理,不同开发环境的设置和插件的使用等等都可以参考Maven的官方网站 http://maven.apache.org/

pom文件

Maven基本所有工作都是对pom.xml文件来进行操作的


  <repositories>
    <repository>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <id>codehausSnapshots</id>
      <name>Codehaus Snapshots</name>
      <url>http://snapshots.maven.codehaus.org/maven2</url>
      <layout>default</layout>
    </repository>
  </repositories>
  • enabled表示这两个版本是否可用,snapshots是快照版,开发过程中经常使用。releases是发布版,部署上线的时候用
  • updatePolicy 提示这个仓库的依赖包是否有更新的
  • checksumPolicy 校验需要
  • url是远程库的地址

在游戏大厅2里面使用nexus来代理,作为公司内部使用的仓库中心。


<distributionManagement>
 <downloadUrl></downloadUrl>
<repository></repository>
 <site></site>
</distributionManagement>
  • distributionManagement部署管理
  • downloadUrl提供别人下载你项目的url
  • repository项目部署的地方
  • site项目文文档部署的地方(游戏大厅使用这样来部署文档的,采用ftp方式上传)

这样就很好的控制项目的部署,当然有很多种方式可以处理这样的问题,可以写一个插件处理,也可以结合hudson使用脚本处理(游戏大厅暂时使用这种方式来处理)。


 <build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
  </build>

观察这些都是输出路径,但是一般我们会按照maven的规范来做。


<properties>
    <spring.version>2.5.6</spring.version>
</properties>
  • 对于一些像spring的多个包的,我们需要保存版本一致,可以加上properties
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
  • 依赖版本可以写属性读取的方式

把spring抽离出来,单独作为一个项目来处理,写一个新的pom

<project>
<modelVersion>4.0.0</modelVersion>
  <groupId>cn.onlinepc.commons</groupId>
  <artifactId>spring-dependencies-module</artifactId>
  <packaging>pom</packaging>
  <properties>
    <spring.version>2.5.6</spring.version>
    </properties>
  <version>${spring.version}</version>
  
    <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>		

		        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>		
    </dependencies>
</project>

运行mvn install 弄好到本地,或者上传到私服

   <properties>
    <springversion>2.5.6</springversion>
   </properties>
    <dependencies>
      ......
     <dependency>
      <groupId>cn.onlinepc.commons</groupId>
      <artifactId>spring-dependencies-module</artifactId>
      <type>pom</type>
      <version>${springversion}</version>
     </dependency>
     ........
    </dependencies>

引入到项目里面就可以了,同样可以使用在不同应用之间的一些client包的调用



项目上传到nexus上,pom.xml配置

  <distributionManagement>
      <repository>
	  <id>snapshots</id>
	  <name>pcgroup repository</name>
	  <url>http://192.168.75.11:8080/nexus-webapp-1.9.2.3/content/repositories/snapshots/</url>
      </repository>
  </distributionManagement>

setting.xml配置

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

pom.xml与setting.xml的id要匹配,提供上传授权用的
maven命令

mvn clean package deploy

下载依赖包的源码


1. 使用maven命令:mvn dependency:sources 下载依赖包的源代码。
2. 使用参数: -DdownloadSources=true 下载源代码jar。 -DdownloadJavadocs=true 下载javadoc包。
mvn dependency:sources -DdownloadSources=true -DdownloadJavadocs=true

游戏大厅Maven使用总结

  • 在游戏大厅项目中,我们更多的是使用Maven来进行项目的构建。
  • 我们按照Maven的规范来进行项目开发,很方便地就可以构建了,只需要添加项目中使用到的一些依赖包就可以了。
  • 搭建了nexus,项目构建速度也提高了很多。公司内部一些jar包也放到nexus里管理,svn就只存在代码了,可以省不少空间。
  • 为Hudson持续集成提供了构建功能,Ant也可以构建,但是没有规范和依赖包的管理。
  • 生成项目报告和测试报告,maven里面sonar这个插件可以输出更多的报告(项目存在的问题,风格规范,代码耦合问题,复杂度问题,测试报告问题)
  • Maven在服务器安装的时候需要依赖jdk,一般设置JAVA_HOME就可以了。
  • 结合eclipse开发时,好像少了自动生成功能,每次写完java类和jsp时都需要mvn package一下,才能通过resin访问修改后的内容,netbeans的话会好一点,只是java类需要package。
  • 使用eclipse可能会出现,jdk 1.4 版本以上的问题,这里就需要设置eclipse.ini来解决。设置jdk的路径

使用中的一些优点

  • maven当多个项目在一起工作的时候是比较有用的,只要把项目上传了,就可以提供给别的项目进行依赖。也不用手动地替换jar包,只需要在项目pom文件里面进行修改版本号就可以了
  • lib里的jar包再也不用放在svn上了,我们可以统一管理
  • 对版本号一目了然
  • 对于依赖包可以自动下载和更新,这样我们就省了找依赖包的时间了
  • 提供的功能也是比较多的,像打包功能,一般我们用ide进行打包,但是通常静态文件像js,css,img等是分开打包的,这样可以利用maven的打包插件进行自定义打包,同样能够打项目里独立的client包
  • 提供源码就可以进行部署了(公司的情况不一样)
  • 能够分析项目的一些情况,例如项目复杂度,耦合度和存在的一些风险等等。提供各种文档,如项目api和测试报告等等(sonar插件已经把这些功能整合得很好)

使用中的一些缺点

  • 对于初学者来说,学习曲线较陡,不易理解
  • 结合公司情况,更新jar包会出现这样的一个情况,就是更具依赖包版本的不同,我们更新系统就不能覆盖原来的jar包,这样只能让网络的同时帮忙删除,带来更新时候的麻烦(itbbs和bbs6.5更新同一样东西时的问题)
  • 暂时不能结合ide环境所改即所得,就是在ide修改代码后,需要build一下才能进行页面上的代码更新,这一点会影响开发效率,(netbeans支持jsp文件所改即所得,eclipse好像不支持)

猜你喜欢

转载自breezylee.iteye.com/blog/1943602