maven总结1
maven安装
1、确定已经正确安装jdk,若未安装需要先安装jdk 2、http://maven.apache.org/download.cgi 官网下载maven压缩包(Window下载zip包,linux下载tar.gz包),
解压缩apache-maven-3.1.1-bin.zip,解压后本地路径为D:\dev_env\apache-maven-3.1.1 3、配置环境变量: 新建环境变量 M2_HOME = D:\dev_env\apache-maven-3.1.1 在环境变量PATH的后面加上 ;%M2_HOME%\bin
注意:最前面有一个分号,环境变量配置以分号分隔,若在未配置maven path时,path环境变量最末尾已经有分号,则 ;%M2_HOME%\bin 前面的分号可以不加 4、在控制台(cmd)下输入mvn -v命令,验证maven的安装情况
自定义修改本地仓库路径
maven默认的本地仓库路径是当前用户目录下的 .m2/repository (本地环境地址是:C:\Users\Administrator\.m2\repository ,若为linux系统则为~/.m2/repository) 可自定义修改本地仓库的路径,修改后的路径为D:\dev_env\maven\repos (建议新建两层目录maven和repos作为本地仓库) 修改步骤: 1)修改%M2_HOME%/conf(D:\dev_env\apache-maven-3.1.1\conf)下的settings.xml文件, 增加 <localRepository>D:/dev_env/maven/repos</localRepository> 路径为修改后的本地仓库的路径 settings.xml文件中的localRepository配置被注释掉了,新增的localRepository配置可以添加到注释下面
2)将修改后的文件复制到D:\dev_env\maven目录下(注意该目录是本地仓库目录的上级目录)
简单实例
maven项目目录规范:
源代码应该放置到src/main/java中 源代码的资源文件应该放置在src/main/resources文件夹中 测试代码应该放置到src/test/java中 测试代码的资源文件应该放置在src/test/resources文件夹中
maven命令:
mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理) mvn clean compile-->表示先运行清理之后运行编译,会见代码编译到target文件夹中 mvn clean test-->运行清理和测试 mvn clean package-->运行清理和打包 mvn clean install-->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用 mvn clean deploy-->运行清理和发布(发布到私服上面)
实例步骤:
1、新建一个项目跟目录01,本地路径为D:\test\01
2、在01目录下新建pom.xml文件,每一个dependency代表项目所依赖的一个jar包,01项目依赖junit包
[html] view plaincopyprint?
<?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>hello</groupId>
<artifactId>hello-first</artifactId>
<version>SNAPSHOT-0.0.1</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
<?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>hello</groupId> <artifactId>hello-first</artifactId> <version>SNAPSHOT-0.0.1</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies></project>
3、根据maven项目目录规范创建源码目录
[java] view plaincopyprint?
package xixi;
public class HelloWorld
{
public String sayHello ()
{
return "hello world";
}
}
package xixi;public class HelloWorld{ public String sayHello () { return "hello world"; }}
4、根据maven项目目录规范创建测试源码目录
[java] view plaincopyprint?
package xixi;
import org.junit.*;
import static junit.framework.Assert.*;
import xixi.*;
public class TestHello
{
public void testSayHello()
{
HelloWorld hello = new HelloWorld();
assertEquals(hello.sayHello(), "hello world");
}
}
package xixi;import org.junit.*;import static junit.framework.Assert.*;import xixi.*;public class TestHello{ @Test public void testSayHello() { HelloWorld hello = new HelloWorld(); assertEquals(hello.sayHello(), "hello world"); }}
5、在cmd下进入项目根目录 D:\test\01
6、运行maven命令 运行maven命令请保持网络畅通
mvn compile 编译
mvn test 测试
最后的BUILD SUCCESS 表示执行命令成功
7、新建项目跟目录02和源码目录,02项目中的类会用到01项目中的HelloWorld类
由于02项目会引用01项目中的类,此时01项目应该作为一个jar包供02使用,02项目的依赖配置中会依赖01项目
[java] view plaincopyprint?
package xixi;
import xixi.*;
public class HelloWorld2
{
public static void main(String args[])
{
HelloWorld hello = new HelloWorld();
System.out.println(hello.sayHello());
}
}
package xixi;import xixi.*;public class HelloWorld2{ public static void main(String args[]) { HelloWorld hello = new HelloWorld(); System.out.println(hello.sayHello()); }}
D:\test\02\pom.xml 02依赖配置中的信息必须和01pom文件中定义的groupId artifactId version 保持一致 02项目依赖hello-first jar包,在dependency中配置
[html] view plaincopyprint?
<?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>hello</groupId>
<artifactId>hello-second</artifactId>
<version>SNAPSHOT-0.0.1</version>
<dependencies>
<dependency>
<groupId>hello</groupId>
<artifactId>hello-first</artifactId>
<version>SNAPSHOT-0.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
<?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>hello</groupId> <artifactId>hello-second</artifactId> <version>SNAPSHOT-0.0.1</version> <dependencies> <dependency> <groupId>hello</groupId> <artifactId>hello-first</artifactId> <version>SNAPSHOT-0.0.1</version> <scope>compile</scope> </dependency> </dependencies></project>
8、 在控制台cmd下进入01项目的根目录 D:\test\01 ,执行 mvn clean install命令 (这个命令会把01项目打成jar包放到本地仓库中,运行完命令可在仓库中找到01项目jar包)
9、在控制台cmd下进入02项目的根目录 D:\test\02 ,执行mvn compile 命令,出现 BUILD SUCCESS信息表示执行成功
02项目会依赖01项目,02项目在编译的时候会先从本地仓库中寻找依赖的jar包,寻找不到再从maven中央仓库中寻找(所以要先在01项目下运行 mvn install将01 jar包发布到本地仓库中,02寻找依赖时才能正确导入jar包)
10、在控制台cmd下进入02项目的根目录 D:\test\02 ,执行mvn clean package命令,会将02项目打成一个jar包(位于target下,执行编译完的class文件也在该目录下)
此时生成的jar包是不可执行的,02项目中的HelloWorld2.java文件中有个main方法,要生成可执行的jar包需要借助maven-shade-plugin,配置完插件后的pom文件如下
D:\test\02\pom.xml
[html] view plaincopyprint?
<?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>hello</groupId>
<artifactId>hello-second</artifactId>
<version>SNAPSHOT-0.0.1</version>
<dependencies>
<dependency>
<groupId>hello</groupId>
<artifactId>hello-first</artifactId>
<version>SNAPSHOT-0.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<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指定main方法所在的类 -->
<mainClass>xixi.HelloWorld2</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<?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>hello</groupId> <artifactId>hello-second</artifactId> <version>SNAPSHOT-0.0.1</version> <dependencies> <dependency> <groupId>hello</groupId> <artifactId>hello-first</artifactId> <version>SNAPSHOT-0.0.1</version> <scope>compile</scope> </dependency> </dependencies> <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指定main方法所在的类 --> <mainClass>xixi.HelloWorld2</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build></project>
11、更改完pom文件,在控制台cmd下进入02项目的根目录 D:\test\02 ,重新执行mvn clean package命令,打开target目录,可以看到hello-second-SNAPSHOT-0.0.1.jar和original-hello-second-SNAPSHOT-0.0.1.jar两个jar包,前者是带有Main-Class信息的可运行jar,后者是原始的jar,打开hello-second-SNAPSHOT-0.0.1.jar的
META-INF/MANIFEST.MF,可以看到这样一行信息:Main-Class: xixi.HelloWorld2
12、在控制台cmd下进入02项目的根目录 D:\test\02,执行 java -jar target\hello-second-SNAPSHOT-0.0.1.jar 命令,执行jar包中的main方法,控制台输出hello world
最新文章
- Android setTag方法的key问题
- SQL Server如何提高数据库备份的速度
- Entity Framework在SaveChanges()之前拿到对象的自增长ID
- 【转】Nginx系列(三)--管理进程、多工作进程设计
- C#操作IE
- iOS校验身份证是否合法
- 使用 Vue 和 epub.js 制作电子书阅读器
- 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
- Vuex- Action的 { commit } {commit}是什么写法
- Windows环境下在sublime text3配置C编译环境
- Xamarin.Android 使用 SimpleAdapter 打造 ListView 万能适配器
- mysql 数据库的备份与还原 at winows
- 分布式事务框架&;解决方案参考
- CentOS和AIX查看系统序列号
- SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)
- 分布式一致性协议介绍(Paxos、Raft)
- Redis学习笔记之Redis中5种数据结构的使用场景介绍
- 前后端分离, 前端如何防止直接输入URL进入页面?
- ubuntu14.04 python2.7安装MySQLdb
- JSONObject,JSONArray,String,Map间的互转