maven初步使用
2013-05-07 17:26
295 查看
Maven功能:
1),项目构建工具;自动打包和部署;---避免项目构建的重复;
2),Jar插件库;
3),取代ant;
Apache 项目; | 版本:3.0.5;
http://maven.apache.org/
参考:
参考书:
从上面网站下载的”maven权威指南”;(暂时不考虑看)
从上面网站下载的”Maven in action.pdf”部分,---以及其它途径下载的该书部分内容”maven实战.pdf”;
系列文章;
http://www.juvenxu.com/category/maven/page/2/
(先看maven专栏部分;从1到10;)
Maven最佳实践:
1),使用插件的时候显式声明版本。
2),配置依赖的时候显
4000
式声明版本。
3),除项目内部依赖外,不要依赖其它 SNAPSHOT。
--------------------------------------------
Maven安装:
1),下载:
官网下载apache-maven-3.0.5-bin.zip;解压缩;
2),配置操作系统环境变量:
我的电脑---右键,属性---高级选项,环境变量;---系统变量,新建,变量名:M2_HOME,变量值:D:\javaSoftInstall\apache-maven-3.0.5(个人maven解压路径)。| 修改系统变量Path,加入内容:%M2_HOME%\bin,与前面的内容使用 ; 隔开;
···
检查:
Cmd中, echo %M2_HOME% ---会输出maven安装目录;
mvn -v 出错;修改:去掉java_home变量值结尾的分号,就好了;
3),升级maven:
解压缩新的maven安装文件;
修改环境变量m2_home中的值为最新的解压文件;
----------------------------
一个实践:
复制D:\javaSoftInstall\apache-maven-3.0.5\conf(maven安装目录)下的settings.xml,文件到C:\Users\sony\.m2(用户文件)下;
.m2:
C:\Users\sony\.m2\repository,maven构件都存储到该仓库中。
···
清理,优化工作;
Eclipse安装m2eclipse插件:
http://m2eclipse.sonatype.org/sites/m2e
安装完成后,重启eclipse;文件---新建---其它,可以看到Maven选项,安装成功;
一些实践:
不要使用ide内嵌的maven,
Windows---首选项---maven,installations,add,选择本地的maven安装目录;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Maven使用:
1,Pom.xml;---定义项目基本信息,描述项目如何构建,声明项目依赖;
根元素下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0。
这段代码中最重要的是groupId,artifactId和version三行。这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者war都是以基于这些基本的坐标进行区分的。
groupId定义了项目属于哪个组;
artifactId定义了当前Maven项目在组中唯一的ID;
version指定了Hello World项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version 会不断更新,如升级为1.0、1.1-SNAPSHOT、1.1、2.0等等。
最后一个name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但我还是推荐为每个POM声明name,以方便信息交流。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2,编写主代码:
默认情况下,Maven假设项目主代码位于src/main/java目录,我们遵循Maven的约定,创
建该目录;
然后在该目录下创建文件HelloWorld.java,
···
无须额外的配置,Maven会自动搜寻该目录找到项目主代码。
其次,该Java类的包名是com.juvenxu.mvnbook.helloworld,这与我们之前在POM中定义的groupId和artifactId相吻合。一般来说,项目中Java类的包都应该基于项目的groupId和artifactId,这样更加清晰,更加符合逻辑,也方便搜索构件或者Java类。
D盘创建hello-world文件夹:
1),pom.xml;
2),src\main\java目录;
3),上面目录下,创建HelloWorld.java类;
package com.juvenxu.mvnbook.helloworld;
public class HelloWorld
{
public String sayHello()
{
return "Hello Maven";
}
public static void main(String[] args)
{
System.out.print( new HelloWorld().sayHello() );
}
}
Cmd进入到D:\hello-world,执行mvn clean compile
编译出D:\hello-world\target\classes\com\juvenxu\mvnbook\helloworld目录,HelloWorld.class文件;
···
clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码,
默认情况下Maven构建的所有输出都在target/目录中;
Maven首先执行了clean:clean任务,删除target/目录,接着执行resources:resources 任务(未定义项目资源,暂且略过);最后执行compiler:compile 任务,将项目主代码编译至target/classes 目录;
3,编写测试代码:
在src\test\java中放置项目的测试代码;
scope为依赖范围,若依赖范围为test 则表示该依赖只对测试有效;
如果不声明依赖范围,那么默认值就是compile,表示该依赖对主代码和测试代码都有效。
package com.juvenxu.mvnbook.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest
{
@Test
public void testSayHello()
{
HelloWorld helloWorld = new HelloWorld();
String result = helloWorld.sayHello();
assertEquals( "Hello Maven", result );
}
}
mvn clean test
命令行输入的是mvn clean test,而Maven实际执行的可不止这两个任务,还有clean:clean、
resources:resources、compiler:compile、resources:testResources以及compiler:testCompile。暂时我们需要了解的是,在Maven执行测试(test)之前,它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,这是Maven生命周期的一个特性,
4,打包和运行:
mvn clean package
默认打包为jar文件;
类似地,Maven会在打包之前执行编译、测试等操作。
该文件也位于target/输出目录中,它是根据artifact-version.jar规则进行命名的,
安装任务:
mvn clean install
;
生成可执行的jar文件;
1),
Pom.xml在 </project>前加入下面段
<build>
<plugins>
<plugin>
<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.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
···
2),再次执行mvn clean install
3),然后,
D: \hello-world>java -jar target\hello-world-1.0-SNAPSHOT.jar
输出:Hello Maven
然后该模块可以供其他maven项目使用;
-----------------------------------------------------------------
使用Archetype生成项目骨架:
D盘建立文件夹code;
Cmd进入d:code
mvn archetype:generate
紧接着我们会看到一段长长的输出,有很多可用的archetype 供我们选择,包括著名的Appfuse项目的archetype,JPA项目的archetype等等。每一个archetype前面都会对应有一个编号。
同时命令行会提示一个默认的编号,其对应的archetype为maven-archetype-quickstart,我们直接回车以选择该archetype,紧接着Maven会提示我们输入要创建项目的groupId、artifactId、 version、以及包名package,如下输入并确认:
Define value for groupId: : com.juvenxu.mvnbook
Define value for artifactId: : hello-world
Define value for version: 1.0-SNAPSHOT: :
Define value for package: com.juvenxu.mvnbook: : com.juvenxu.mvnbook.helloworld
Confirm properties configuration:
groupId: com.juvenxu.mvnbook
artifactId: hello-world
version: 1.0-SNAPSHOT
package: com.juvenxu.mvnbook.helloworld
Y: : y
Archetype插件将根据我们提供的信息创建项目骨架。在当前目录下,Archetype插件会创建一个名为hello-world(我们定义的artifactId)的子目录,从中可以看到项目的基本结构:
pom.xml;
src/main/java;
src/test/java;
然后可以使用,进行继续开发;
-------------------------------------------------------------------
m2eclipse简单使用
导入Maven项目:
Eclipse;file---import---maven,exsiting maven projects,选取上面自动建立的D:\code\hello-world项目;
然后在eclipse中可以看到项目;
创建Maven项目:
File---new---other---maven,maven project---next,选择默认的工作空间路径,next;---在 new maven project界面,Select an Archetype中,默认选项,next;---,出入group id,artifactId,
完成创建;
和上面使用Archetype插件自动构建的项目,导入eclipse后,基本同;
运行mvn命令:
Eclipse的maven项目的pom.xml,右键,run as,选择常用的maven命令;
选择想要执行的Maven命令就能执行相应的构建,同时我们也能在Eclipse的console中看到构建输出。
···
这里常见的一个问题是,默认选项中没有我们想要执行的Maven命令怎么办?比如,默认带有mvn test,但我们想执行mvn clean test,很简单,选择Maven buid… 以自定义Maven运行命令,在弹出对话框中的Goals一项中输入我们想要执行的命令,如clean test,设置一下Name,点击Run即可。并且,下一次我们选择Maven build,或者使用快捷键Alt + Shift + X, M快速执行Maven构建的时候,上次的配置直接就能在历史记录中找到。
···Maven实战.pdf---已看完;| maven初步完成。
////////////////////////////////////////////////////////////////////////////////////////////////////////
坐标和依赖:(”Maven in action.pdf”内容)
标识名称、版本的jar文件;maven会自动去找;
世界上任何一个构件都可以使用Maven 坐标唯一标识,Maven坐标的元素包括groupId、artifactId 、version 、packaging、classifier。
Maven 内置了一个中央仓库的地址(http://repo1.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载。
在我们开发自己项目的时候,也需要为其定义适当的坐标,这是Maven 强制要求的,在这个基础上,其他Maven 项目才能引用该项目生成的构件。
···
packaging:该元素定义Maven 项目的打包方式。
classifier :该元素用来帮助定义构建输出的一些附属构件。
注意,我们不能直接定义项目的 classifier ,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。
依赖的配置:
type :依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
依赖范围:
Compile,编译依赖范围;
Test,测试依赖范围;
Provided,已提供依赖范围;
Runtime,运行时依赖范围;
System,系统依赖范围;
Import,导入依赖范围;
传递性依赖;
依赖调解:
路径最近着优先;然后,顺序最靠前的那个依赖优胜;
可选依赖:不使用;
最佳实践:
排除依赖;---排除不要的依赖,或者的替换;
归类依赖;---例:提取spring版本号相同的多个项目,使用公用的版本号。
优化依赖:
Maven 会自动解析所有项目的直接依赖 和传递性依赖,并且根据规则正确判断每个依赖的范围,对于一些依赖冲突,也能进行调 节,以确保任何一个构件只有唯一的版本在依赖中存在。在这些工作之后,最后得到的那 些依赖被称为已解析依赖;
运行如下的命令查看当前项目的已解析依赖:
mvn dependency:list
可以运行如下命令查看当前项目的依赖树:
mvn dependency:tree
----------------------------------------------------------------
使用maven构建web应用:(”Maven in action.pdf”内容)
显示指定web的打包方式为war;---没有紫色句,则默认打包为jar文件;
<project>
...
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>sample - war</artifactId>
<packaging>war</packaging>
<version>1.0- SNAPSHOT</version>
...
</project>
jetty -maven-plugin
使用Cargo 实现自动化部署 :
Cargo 支持两种本地部署的方式,分别为standalone 模式和existing 模式。在standalone 模式中,Cargo 会从Web 容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置被重新生成。而在existing 模式中,用户需要指定现有的 Web 容器配置目录,然后Cargo 会直接使用这些配置。
standalone 模式:
1 <plugin>
2 <groupId>org.codehaus.cargo</groupId>
3 <artifactId>cargo-maven2-plugin</artifactId>
4 <version>1.3.1</version>
5 <configuration>
6 <container>
7 <containerId>tomcat7x</containerId>
8 <home>D:\lib\apache-tomcat-7.0.34</home>
9 </container>
10 <configuration>
11 <type>standalone</type>
12 <home>${project.build.directory}/tomcat7x</home>
13 <properties>
14 <cargo.servlet.port>8082</cargo.servlet.port>
15 </properties>
16 </configuration>
17 </configuration>
18 </plugin
···紫色,配置端口,默认不需要,为8080;
existing 模式:
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo - maven2- plugin</artifactId>
<version>1.0</version>
<configuration>
<container>
<containerId>tomcat6x</containerId>
<home>D:\ cmd \ apache -tomcat - 6.0.29</home>
</container>
<configuration>
<type>existing</type>
<home>D:\ cmd \ apache -tomcat - 6.0.29</home>
</configuration>
</configuration>
</plugin>
mvn cargo:start运行;
部署至远程web容器:
1 <plugin>
2 <groupId>org.codehaus.cargo</groupId>
3 <artifactId>cargo-maven2-plugin</artifactId>
4 <version>1.3.1</version>
5 <configuration>
6 <container>
7 <containerId>tomcat7x</containerId>
8 <type>remote</type>
9 </container>
10 <configuration>
11 <type>runtime</type>
12 <properties>
13 <cargo.remote.username>admin</cargo.remote.username>
14 <cargo.remote.password>8082</cargo.remote.password>
15 <cargo.tomcat.manager.url>http://10.68.14.119:8080/manager</cargo.tomcat.manager.url>
16 </properties>
17 </configuration>
18 </configuration>
19 </plugin>
configuration 的type 子元素值为runtime,表示既不使用独立的容器配置,也不使用本地现有的容器配置,而是依赖于一个已运行的容器。properties元素用来声明一些容器热部署相关的配置,例如这里的Tomcat 6就需要提供用户名、密码、以及管理地址。
运行,mvn cargo:redeploy
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
参考:
http://zhimin8haomi.iteye.com/blog/1847524 (看下上面pdf种没有的内容)
创建maven web项目:
File---new---other---maven,maven project---next,选择默认的工作空间路径,next;---在 new maven project界面,Select an Archetype中,
next;---,输入group id,artifactId,
完成创建;
项目结构:
1),项目构建工具;自动打包和部署;---避免项目构建的重复;
2),Jar插件库;
3),取代ant;
Apache 项目; | 版本:3.0.5;
http://maven.apache.org/
参考:
参考书:
从上面网站下载的”maven权威指南”;(暂时不考虑看)
从上面网站下载的”Maven in action.pdf”部分,---以及其它途径下载的该书部分内容”maven实战.pdf”;
系列文章;
http://www.juvenxu.com/category/maven/page/2/
(先看maven专栏部分;从1到10;)
Maven最佳实践:
1),使用插件的时候显式声明版本。
2),配置依赖的时候显
4000
式声明版本。
3),除项目内部依赖外,不要依赖其它 SNAPSHOT。
--------------------------------------------
Maven安装:
1),下载:
官网下载apache-maven-3.0.5-bin.zip;解压缩;
2),配置操作系统环境变量:
我的电脑---右键,属性---高级选项,环境变量;---系统变量,新建,变量名:M2_HOME,变量值:D:\javaSoftInstall\apache-maven-3.0.5(个人maven解压路径)。| 修改系统变量Path,加入内容:%M2_HOME%\bin,与前面的内容使用 ; 隔开;
···
检查:
Cmd中, echo %M2_HOME% ---会输出maven安装目录;
mvn -v 出错;修改:去掉java_home变量值结尾的分号,就好了;
3),升级maven:
解压缩新的maven安装文件;
修改环境变量m2_home中的值为最新的解压文件;
----------------------------
一个实践:
复制D:\javaSoftInstall\apache-maven-3.0.5\conf(maven安装目录)下的settings.xml,文件到C:\Users\sony\.m2(用户文件)下;
.m2:
C:\Users\sony\.m2\repository,maven构件都存储到该仓库中。
···
清理,优化工作;
Eclipse安装m2eclipse插件:
http://m2eclipse.sonatype.org/sites/m2e
安装完成后,重启eclipse;文件---新建---其它,可以看到Maven选项,安装成功;
一些实践:
不要使用ide内嵌的maven,
Windows---首选项---maven,installations,add,选择本地的maven安装目录;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Maven使用:
1,Pom.xml;---定义项目基本信息,描述项目如何构建,声明项目依赖;
根元素下的第一个子元素modelVersion指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0。
这段代码中最重要的是groupId,artifactId和version三行。这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者war都是以基于这些基本的坐标进行区分的。
groupId定义了项目属于哪个组;
artifactId定义了当前Maven项目在组中唯一的ID;
version指定了Hello World项目当前的版本——1.0-SNAPSHOT。SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。随着项目的发展,version 会不断更新,如升级为1.0、1.1-SNAPSHOT、1.1、2.0等等。
最后一个name元素声明了一个对于用户更为友好的项目名称,虽然这不是必须的,但我还是推荐为每个POM声明name,以方便信息交流。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Maven Hello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2,编写主代码:
默认情况下,Maven假设项目主代码位于src/main/java目录,我们遵循Maven的约定,创
建该目录;
然后在该目录下创建文件HelloWorld.java,
···
无须额外的配置,Maven会自动搜寻该目录找到项目主代码。
其次,该Java类的包名是com.juvenxu.mvnbook.helloworld,这与我们之前在POM中定义的groupId和artifactId相吻合。一般来说,项目中Java类的包都应该基于项目的groupId和artifactId,这样更加清晰,更加符合逻辑,也方便搜索构件或者Java类。
D盘创建hello-world文件夹:
1),pom.xml;
2),src\main\java目录;
3),上面目录下,创建HelloWorld.java类;
package com.juvenxu.mvnbook.helloworld;
public class HelloWorld
{
public String sayHello()
{
return "Hello Maven";
}
public static void main(String[] args)
{
System.out.print( new HelloWorld().sayHello() );
}
}
Cmd进入到D:\hello-world,执行mvn clean compile
编译出D:\hello-world\target\classes\com\juvenxu\mvnbook\helloworld目录,HelloWorld.class文件;
···
clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码,
默认情况下Maven构建的所有输出都在target/目录中;
Maven首先执行了clean:clean任务,删除target/目录,接着执行resources:resources 任务(未定义项目资源,暂且略过);最后执行compiler:compile 任务,将项目主代码编译至target/classes 目录;
3,编写测试代码:
在src\test\java中放置项目的测试代码;
scope为依赖范围,若依赖范围为test 则表示该依赖只对测试有效;
如果不声明依赖范围,那么默认值就是compile,表示该依赖对主代码和测试代码都有效。
package com.juvenxu.mvnbook.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest
{
@Test
public void testSayHello()
{
HelloWorld helloWorld = new HelloWorld();
String result = helloWorld.sayHello();
assertEquals( "Hello Maven", result );
}
}
mvn clean test
命令行输入的是mvn clean test,而Maven实际执行的可不止这两个任务,还有clean:clean、
resources:resources、compiler:compile、resources:testResources以及compiler:testCompile。暂时我们需要了解的是,在Maven执行测试(test)之前,它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,这是Maven生命周期的一个特性,
4,打包和运行:
mvn clean package
默认打包为jar文件;
类似地,Maven会在打包之前执行编译、测试等操作。
该文件也位于target/输出目录中,它是根据artifact-version.jar规则进行命名的,
安装任务:
mvn clean install
;
生成可执行的jar文件;
1),
Pom.xml在 </project>前加入下面段
<build>
<plugins>
<plugin>
<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.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
···
2),再次执行mvn clean install
3),然后,
D: \hello-world>java -jar target\hello-world-1.0-SNAPSHOT.jar
输出:Hello Maven
然后该模块可以供其他maven项目使用;
-----------------------------------------------------------------
使用Archetype生成项目骨架:
D盘建立文件夹code;
Cmd进入d:code
mvn archetype:generate
紧接着我们会看到一段长长的输出,有很多可用的archetype 供我们选择,包括著名的Appfuse项目的archetype,JPA项目的archetype等等。每一个archetype前面都会对应有一个编号。
同时命令行会提示一个默认的编号,其对应的archetype为maven-archetype-quickstart,我们直接回车以选择该archetype,紧接着Maven会提示我们输入要创建项目的groupId、artifactId、 version、以及包名package,如下输入并确认:
Define value for groupId: : com.juvenxu.mvnbook
Define value for artifactId: : hello-world
Define value for version: 1.0-SNAPSHOT: :
Define value for package: com.juvenxu.mvnbook: : com.juvenxu.mvnbook.helloworld
Confirm properties configuration:
groupId: com.juvenxu.mvnbook
artifactId: hello-world
version: 1.0-SNAPSHOT
package: com.juvenxu.mvnbook.helloworld
Y: : y
Archetype插件将根据我们提供的信息创建项目骨架。在当前目录下,Archetype插件会创建一个名为hello-world(我们定义的artifactId)的子目录,从中可以看到项目的基本结构:
pom.xml;
src/main/java;
src/test/java;
然后可以使用,进行继续开发;
-------------------------------------------------------------------
m2eclipse简单使用
导入Maven项目:
Eclipse;file---import---maven,exsiting maven projects,选取上面自动建立的D:\code\hello-world项目;
然后在eclipse中可以看到项目;
创建Maven项目:
File---new---other---maven,maven project---next,选择默认的工作空间路径,next;---在 new maven project界面,Select an Archetype中,默认选项,next;---,出入group id,artifactId,
完成创建;
和上面使用Archetype插件自动构建的项目,导入eclipse后,基本同;
运行mvn命令:
Eclipse的maven项目的pom.xml,右键,run as,选择常用的maven命令;
选择想要执行的Maven命令就能执行相应的构建,同时我们也能在Eclipse的console中看到构建输出。
···
这里常见的一个问题是,默认选项中没有我们想要执行的Maven命令怎么办?比如,默认带有mvn test,但我们想执行mvn clean test,很简单,选择Maven buid… 以自定义Maven运行命令,在弹出对话框中的Goals一项中输入我们想要执行的命令,如clean test,设置一下Name,点击Run即可。并且,下一次我们选择Maven build,或者使用快捷键Alt + Shift + X, M快速执行Maven构建的时候,上次的配置直接就能在历史记录中找到。
···Maven实战.pdf---已看完;| maven初步完成。
////////////////////////////////////////////////////////////////////////////////////////////////////////
坐标和依赖:(”Maven in action.pdf”内容)
标识名称、版本的jar文件;maven会自动去找;
世界上任何一个构件都可以使用Maven 坐标唯一标识,Maven坐标的元素包括groupId、artifactId 、version 、packaging、classifier。
Maven 内置了一个中央仓库的地址(http://repo1.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载。
在我们开发自己项目的时候,也需要为其定义适当的坐标,这是Maven 强制要求的,在这个基础上,其他Maven 项目才能引用该项目生成的构件。
···
packaging:该元素定义Maven 项目的打包方式。
classifier :该元素用来帮助定义构建输出的一些附属构件。
注意,我们不能直接定义项目的 classifier ,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。
依赖的配置:
type :依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
依赖范围:
Compile,编译依赖范围;
Test,测试依赖范围;
Provided,已提供依赖范围;
Runtime,运行时依赖范围;
System,系统依赖范围;
Import,导入依赖范围;
传递性依赖;
依赖调解:
路径最近着优先;然后,顺序最靠前的那个依赖优胜;
可选依赖:不使用;
最佳实践:
排除依赖;---排除不要的依赖,或者的替换;
归类依赖;---例:提取spring版本号相同的多个项目,使用公用的版本号。
优化依赖:
Maven 会自动解析所有项目的直接依赖 和传递性依赖,并且根据规则正确判断每个依赖的范围,对于一些依赖冲突,也能进行调 节,以确保任何一个构件只有唯一的版本在依赖中存在。在这些工作之后,最后得到的那 些依赖被称为已解析依赖;
运行如下的命令查看当前项目的已解析依赖:
mvn dependency:list
可以运行如下命令查看当前项目的依赖树:
mvn dependency:tree
----------------------------------------------------------------
使用maven构建web应用:(”Maven in action.pdf”内容)
显示指定web的打包方式为war;---没有紫色句,则默认打包为jar文件;
<project>
...
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>sample - war</artifactId>
<packaging>war</packaging>
<version>1.0- SNAPSHOT</version>
...
</project>
jetty -maven-plugin
使用Cargo 实现自动化部署 :
Cargo 支持两种本地部署的方式,分别为standalone 模式和existing 模式。在standalone 模式中,Cargo 会从Web 容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置被重新生成。而在existing 模式中,用户需要指定现有的 Web 容器配置目录,然后Cargo 会直接使用这些配置。
standalone 模式:
1 <plugin>
2 <groupId>org.codehaus.cargo</groupId>
3 <artifactId>cargo-maven2-plugin</artifactId>
4 <version>1.3.1</version>
5 <configuration>
6 <container>
7 <containerId>tomcat7x</containerId>
8 <home>D:\lib\apache-tomcat-7.0.34</home>
9 </container>
10 <configuration>
11 <type>standalone</type>
12 <home>${project.build.directory}/tomcat7x</home>
13 <properties>
14 <cargo.servlet.port>8082</cargo.servlet.port>
15 </properties>
16 </configuration>
17 </configuration>
18 </plugin
···紫色,配置端口,默认不需要,为8080;
existing 模式:
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo - maven2- plugin</artifactId>
<version>1.0</version>
<configuration>
<container>
<containerId>tomcat6x</containerId>
<home>D:\ cmd \ apache -tomcat - 6.0.29</home>
</container>
<configuration>
<type>existing</type>
<home>D:\ cmd \ apache -tomcat - 6.0.29</home>
</configuration>
</configuration>
</plugin>
mvn cargo:start运行;
部署至远程web容器:
1 <plugin>
2 <groupId>org.codehaus.cargo</groupId>
3 <artifactId>cargo-maven2-plugin</artifactId>
4 <version>1.3.1</version>
5 <configuration>
6 <container>
7 <containerId>tomcat7x</containerId>
8 <type>remote</type>
9 </container>
10 <configuration>
11 <type>runtime</type>
12 <properties>
13 <cargo.remote.username>admin</cargo.remote.username>
14 <cargo.remote.password>8082</cargo.remote.password>
15 <cargo.tomcat.manager.url>http://10.68.14.119:8080/manager</cargo.tomcat.manager.url>
16 </properties>
17 </configuration>
18 </configuration>
19 </plugin>
configuration 的type 子元素值为runtime,表示既不使用独立的容器配置,也不使用本地现有的容器配置,而是依赖于一个已运行的容器。properties元素用来声明一些容器热部署相关的配置,例如这里的Tomcat 6就需要提供用户名、密码、以及管理地址。
运行,mvn cargo:redeploy
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
参考:
http://zhimin8haomi.iteye.com/blog/1847524 (看下上面pdf种没有的内容)
创建maven web项目:
File---new---other---maven,maven project---next,选择默认的工作空间路径,next;---在 new maven project界面,Select an Archetype中,
next;---,输入group id,artifactId,
完成创建;
项目结构:
相关文章推荐
- 初步学习使用MAVEN和IDEA写第一个JAVA程序
- maven使用初步
- Maven的初步使用以及命令行工具
- Eclipse中的maven插件初步使用心得
- 使用Eclipse-Maven-git做Java开发(17)--maven项目初步
- Maven的初步使用
- Maven安装及初步使用
- Maven使用初步
- Maven使用初步
- maven之使用公司nexus库(初步)
- maven的初步使用--Eclipse android maven的项目创建
- Maven下使用jetty进行debug
- 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
- 使用IntelliJ IDEA 14和Maven创建java web项目
- 使用maven-war-plugin 对Maven项目进行动态打包
- 使用IDEA创建maven父子工程
- 使用Eclipse构建Maven的SpringMVC项目
- 使用maven命令行进行反向hibernate reverse hbm code 代码生成
- ConstraintLayout 初步理解和使用
- loadrunner中log的使用初步总结