标签:inter 单元格 三次 一个数据库 机制 fir false 生命周期 mic
1、都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?
2、为什么在我的机器上可以正常打包,而配置管理员却打不出来?
3、项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了。
4、我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?
5、这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧
6、现在是第三次,再复制一次吧 ----- 这样真的好吗?
7、我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组
-----这不是一个好的分发机制,太多的环节可能导致出现bug
8、项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了。
Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。
Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上
Maven主要有两大功能:管理依赖、项目构建。
依赖指的就是jar包。
构建过程:
1、Eclipse
使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作
2、Ant
它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪
3、Maven
它是一个项目管理工具,他也是一个项目构建工具,通过使用maven,可以对项目进行快速简单的构建,它不需要告诉maven很多信息,但是需要安装maven去的规范去进行代码的开发。也就是说maven是有约束的。
Maven是使用java开发,需要安装jdk1.6以上
第一步:安装jdk1.6及以上
第二步:将maven下载的压缩包进行解压缩
第三步:配置maven的环境变量MAVEN_HOME
第四步:配置maven的环境变量PATH
第五步:测试maven是否安装成功,在系统命令行中执行命令:mvn –v
在maven中有两个配置文件:用户配置、全局配置(默认)
在maven安装目录的conf里面有一个settings.xml文件,这个文件就是maven的全局配置文件。
该文件中配置来maven本地仓库的地址
默认在系统的用户目录下的m2/repository中,该目录是本地仓库的目录。
用户配置文件的地址:~/.m2/settings.xml,该文件默认是没有,需要将全局配置文件拷贝一份到该目录下。
重新指定本地仓库地址,如果不指定,则默认是~/.m2/repository目录,如果用户配置文件不存在,则使用全局配置文件的配置。
Project
|--src(源码包)
|--main(正常的源码包)
|--java(.java文件的目录)
|--resources(资源文件的目录)
|--test(测试的源码包)
|--java
|--resources
|--target(class文件、报告等信息存储的地方)
|--pom.xml(maven工程的描述文件)
Maven的命令要在pom.xml所在目录中去执行
编译的命令
清除命令,清除已经编译好的class文件,具体说清除的是target目录中的文件
测试命令,该命令会将test目录中的源码进行编译
打包命令
安装命令,会将打好的包,安装到本地仓库
先清空再编译
cmd 中录入 mvn clean test命令
组合指令,先执行clean,再执行test,通常应用于测试环节
cmd 中录入 mvn clean package命令
组合指令,先执行clean,再执行package,将项目打包,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
cmd 中录入 mvn clean install 查看仓库,当前项目被发布到仓库中
组合指令,先执行clean,再执行install,将项目打包,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
部署————将打好的包发布到资源仓库中
在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。
Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器
groupId:定义当前Maven组织名称
artifactId:定义实际项目名称
version:定义当前项目的当前版本
其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
test:测试依赖范围。只对于测试classpath有效
provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
runtime:运行时提供。例如:jdbc驱动
A、B、C
B工程依赖A工程,C工程依赖B工程,那么B工程是C工程的直接依赖,A工程是C工程的间接依赖
上面第一行表示第二直接依赖范围
中间的交叉单元格表示传递性依赖范围。
总结:
当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
当第二直接依赖的范围是test的时候,依赖不会得以传递。
当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
在maven中存在两种冲突方式:一种是跨pom文件的冲突,一致是同一个pom文件中的冲突。
MavenFirst的pom文件中依赖来junit的4.9版本,那边MavenSecond和MavenThird中都是使用了4.9版本。
如果MavenSecond中重新依赖junit的4.8版本,那么MavenSecond和MavenThird中都是使用了4.8本,这体现来依赖的就近使用原则。
Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。
插件(plugin),每个插件都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是有插件来实现的。
比如:compile就是一个插件实现的功能。
如果使用maven的tomcat插件的话,那么本地则不需要安装tomcat。
使用tomcat7来运行web工程,它的命令是:tomcat7:run
默认输入tomcat:run去使用tomcat插件来启动web工程,但是默认的tomcat插件使用的tomcat版本是tomcat6
在maven中的继承,指的是pom文件的继承
子工程的pom文件
父工程统一依赖jar包
在父工程中对jar包进行依赖,在子工程中都会继承此依赖
dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本。
子工程的pom文件:
用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging
2.1 本地仓库
默认在~/.m2/repository,如果在用户配置中有配置,则以用户配置的地址为准
2.2 远程仓库
中央仓库(不包含有版本的jar包)
私服
下载网站:http://nexus.sonatype.org/
安装版本:nexus-2.7.0-06.war
第一步:安装tomcat
第二步:将nexus的war包拷贝到tomcat的webapps下
第三步:启动tomcat
访问URL: http://localhost:8080/nexus-2.7.0-06/
默认账号:
用户名: admin
密码: admin123
<mirrors>
<mirror>
<!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8080/nexus-2.7.0-06/content/groups/public/</url>
</mirror>
</mirrors>
在本地仓库的setting.xml中配置如下:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
在需要构建的项目中修改pom文件
<distributionManagement>
<repository>
<id>releases</id>
<name>Internal Releases</name>
<url>http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Internal Snapshots</name>
<url>http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
标签:inter 单元格 三次 一个数据库 机制 fir false 生命周期 mic
原文地址:https://www.cnblogs.com/runbean/p/12636240.html