mvn test:运行test类
mvn compile:下载相关的包
mvn package:应用进行打包
mvn install:将下载的包放到本地的仓库
mvn archetype:generate 下载和archetype相关的包
mvn archetype:generate -DgroupId=zttc.itat.maven -DartifactId=maven-ch04 -Dversion=0.0.1-SNAPSHOT 创建一个maven工程
mvn clean source:jar 可以用来将源文件也打包成功
mvn help:describe
mvn package –Dtest=Hello.java:只执行一个测试类
mvn package –DskipTests=true :跳过测试,不会执行测试
mvn clean install -DskipTests=true:跳过测试直接安装
mvn cobertura:cobertura 这个用来生成测试报告(手动的形式)或者可以使用plugin的形式配置到pom.xml中
工厂:http://mvnrepository.com/
2.、集成eclipse
(1)window->preferences->maven->installations点击Add,增加自己下载安装的maven
(2)window->preferences->maven->User Settings 修改自己的setting文件
(3)在eclipse中建立好一个maven工程之后,要增加source folder:src/main/resources和src/test/resources这两个用来放置我们再开发过程中需要的配置文件
3、dbunit可以用来测试数据库,而不影响原有的数据库数据
4、maven隐藏变量
Maven提供了三个隐式的变量可以用来访问环境变量,POM信息,和Maven Settings
env
env变量,暴露了你操作系统或者shell的环境变量。便 如在Maven POM中一个对${env.PATH}的引用将会被${PATH}环境变量替换,在Windows中为%PATH%.
projetc
project变量暴露了POM。可以使用点标记(.)的路径来引用POM元素的值。例如
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>project-a</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<finalName>${project.groupId}-${project.artifactId}</finalName>
</build>
</project>
当你使用mvn help:effective-pom 查看时,你会看到<finalName>org.sonatype.mavenbook-project-a</finalName>
settings
settings变量暴露了Maven settings信息。可以使用点标记(.)的路径来引用settings.xml文件中元素的值。例如${settings.offline}会引用~/.m2/settings.xml文件中offline元素的值。
5、模块开发
加入已经开发好了user-core、user-log的maven工程模块,但是后面写的user-service需要使用上面的两个模块,则需要将user-core和user-log进行install命令,生成到本地的仓库中,这样再service中的pom.xml中进行引用的时候才能够找到。在前面两个模块的pom.xml上右键,run as->maven build->输入clean install就可以生成到本地仓库中,在service中的pom.xml可以通过以下方式引用:
<dependency> <groupId>${project.groupId}</groupId> <artifactId>user-log</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>user-core</artifactId> <version>${project.version}</version> </dependency>
假如我已经开发完了service但是别人开发的dao还没有开发完,那么我需要测试与dao的通信是否正常,可以使用easymock
7、依赖特性
<scope>...</scope>中有几个依赖的特性:
(1)compile:在编译、测试、打包都有效,也是默认的情况
(2)provided:在编译和测试时加入依赖,在打包时不加
(3)test:测试范围有效,在编译和打包时不使用这个依赖(重要),只有在src/java/test下的java文件才会使用声明为test的jar包,其它位置的不会使用该jar包,如果其他位置有使用该jar包,那么就得把其它位置的java文件移动到src/java/test下
(4)runtime:编译时候无用,只在测试、运行时有效,如对于mysql-connector的声明
8、依赖传递
当scope的范围是test的话,那么就不会讲依赖传递给其它模块,其它模块不会自动获得该所需jar包。
9、maven的聚合操作:假如一个功能有好多模块,那么现在的情况就是我们需要对每个模块分别进行编译,打包,这样比较麻烦,可以通过在各个模块统一的根目录下统一建一个pom.xml文件,通过这个文件,来对所有的模块集中进行编译。
在eclipse中建一个maven project,选择创建一个简单project
选择pom
生成的工程什么都不用做,只需要在pom.xml中增加对三个模块的聚合声明,到三个模块上面的共有的根目录下,然后run as ->mvn clean compile就可以直接运行所有的,而不用单独一个一个去运行
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>zttc.itat.user</groupId>
<artifactId>user-aggregation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!--导入三个模块,对这三个模块做聚合操作 -->
<modules>
<module>../user-core</module>
<module>../user-log</module>
<module>../user-service</module>
</modules>
</project>
10、maven继承(可以将聚合和继承放在一块)
同上,仍然是建立一个简单project,然后也是只修改新建生成的pom.xml,如user-parent工程,在其pom.xml中写的是各个模块重复的内容,让所有的模块都继承这个pom,比如对于子模块user-core中的pom.xml中,可以使用下面来引用共有的声明
<parent>
<groupId>zttc.itat.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../user-parent/pom.xml</relativePath>
</parent>
同理,其他模块也加入这个一部分声明。
对于dependency,最好不要使用继承,因为那样会使每个模块都引用相同的依赖,但是又的模块并不需要那么多的依赖,这样会导致性能不好,但是可以在user-parent中pom.xml中通过dependencyManagement这个表签来声明所有的依赖,但是在子模块中仍然要写自己需要的jar,但是就不用写scope和version标签了,这两个标签使用的会直接用parent中的。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>user-log</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
11、Nexus sonytype公司生产的私服,主要是为了将我们的依赖放在该私服中,这样就使得自己的机器和该私服处于一个局域网,加快依赖的下载速度,而不用去中央工程去下载,这样比较慢
(1)将nexus的bin目录加入到环境变量,然后就可以在命令行使用nexus
(2)修改……\nexus-2.11.2-06\bin\jsw\conf\wrapper.xml文件,将下面的部分修改为jdk(只能是jdk1.7以上的才可以)的绝对路径
(3)命令行下执行 nexusinstall 安装这个服务
(4)执行nexusstart 启动
(5)使用localhost:8081/nexus访问即可,用户名和密码默认为admin和admin123
(6)hosted工厂主要是局域网中的,不是针对公网,中央工厂下的资源都在Central这种工厂中,Apache Snapshots专门下载apache的snapshot
(7)在parent/pom.xml中增加以下内容,该工程就会首先在本地找,本地找不到的话就在nexus中找,最后再向中央工厂去找。
<repositories>
<repository>
<id>nexus</id>
<name>NexusRespository</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</repository>
</repositories>
为了增加通用性(这种配置的话,换一个项目就会变换配置一次,太麻烦),让所有的都支持这种方式,增加公共性,那么就在maven的settings.xml中进行设置如下:
<profiles>
<profile>
<id>nexusProfile</id>
<repositories>
<repository>
<id>nexus</id>
<name>NexusRespository</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled><!--可以下载release的jar包 -->
</releases>
<snapshots>
<enabled>true</enabled><!--可以下载snapshot的jar包,需要手动开启 -->
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<!--只有激活之后才可以生效-->
<activeProfiles>
<activeProfile>nexusProfile</activeProfile>
</activeProfiles>
如果我要求在nexus中找不到的话也不去中央工厂去找,那么就可以使用镜像配置,同样是在settings.xml中进行配置,注意:mirrorOf的名字可以参考maven-model-builder-3.0.5.jar包中的pom.xml的配置来写,让相同名字的到该镜像中来找
<!--工厂的镜像,只要mirrorOf中的工厂要访问,就会自动来找镜像,如果
镜像无法访问,就不会去中央工厂,*表示所有的工程都使用镜像,推荐-->
<mirror>
<id>nexusMirror</id>
<!--<mirrorOf>*</mirrorOf>-->
<mirrorOf>nexus,central</mirrorOf>
<name>Human ReadableName for this Mirror.</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
12、提交到工厂:mvndeploy进行发布
(1)首先在parent/pom.xml中增加
<distributionManagement>
<repository>
<id>user-release</id>
<name>userreleaseresp</name>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>user-snapshot</id>
<name>usersnapshotresp</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
(2)对项目进行授权:在settings.xml中进行上面两个id的server的配置
<server>
<id>user-release</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>user-snapshot</id>
<username>deployment</username>
<password>deployment123</password>
</server>
(3)如果想每个项目建立一个自己的仓库,自己的角色等,那么就先创建release和snapshot的respository,然后就是创建该respository的privileges,然后创建roles,然后创建users,这样一层一层的建立
13、声明周期
Clean:①pre-clean ②clean ③post-clean
Compile:….
14、插件(要在parent中加入声明<bulid><pluginmagament></pluginmagament ></bulid>,在模块中的<bulid></bulid>标签中加入<plugins><plugin></plugin></plugins>来声明
(1)complier插件,可以用来改变使用的jdk版本
(2)Surefire插件可以用来包含那些测试java的,configuration中的include和exclude都会把相应的测试用的java文件进行加入或者排除,如果不加的话,默认的情况下,maven只会执行Test**、**Test、**TestCase这种测试java文件
15、webapp
(1)建立webapp的maven工程
(2)建立源文件夹:src/main/java这里面用来存放相关的java代码
(3)建立servlet,因为servlet需要依赖servlet.jar包,所以去中央仓库中寻找servlet-api版本,然后配到parent/pom.xml中
(4)可以将前端的页面,如jsp文件放在工程/src/main/webapp下
(5)执行mvn clean package 会生成相应的war文件,然后将该war放在tomcat中即可
由于每次修改都要重新打包war,那么可以使用一种copy-maven-plugin插件,在执行mvn clean package之后将生成的war包直接拷贝到tomcat的webapp目录下,就不用手动进行拷贝了。
(6)jetty插件来进行发布,增加jetty的插件,然后(该插件大概会每隔10s进行查找)
clean compile jetty:run
然后就可以根据配置的jetty来运行该web工程,这样就不用生成war再拷贝到tomcat了,直接就可以用jetty来作为服务器
推荐书籍:
(1) java企业设计模式
(2) 分析模式,可复用的对象模型
http://www.xuexi111.com/jiaocheng/shipin/66165.html