PASSION之MAVEN工程详解
来源:互联网 发布:杭州淘宝收费拍摄地点 编辑:程序博客网 时间:2024/05/16 06:24
什么是maven?
maven就是一个项目管理工具,这个软件体现了许多思想。比如:插件思想,规范大于编码,继承等。软件就是读取数据,加工数据,得到想要的结果。
maven相关解读
规定大于编码思想:在科学的世界,总是要求是在某个规定下进行发挥,就像数学题的前提条件一样。这里maven的规范是,你若想利用maven这个工具帮你干活。那么,你的工程目录结构必须是一下规范:
- src/main/java 存放项目的java文件
- src/main/resources 存放项目的资源文件,如spring,hibernate的 配置文件
- src/test/java 存放所有的测试的java文件
- src/test/resources 存放测试用的资源文件
- target 项目输出位置,一般只看下面生成的war包
pom.xml 文件
这样其实就构建了POM对象模型,而表述的语言就是pom.xml文件中xml语言,因为xml语言是人类和计算机交互的利器。故一般用当做配置文件,而且有了xsd或者tdt规范。
上面的图片就很好解释maven整个软件的架构,可以看出这就是一般软件的优秀架构。maven根据pom.xml文件,把它转化成项目对象模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包。在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情。而这些plug-in会产生一些中间产物。pom文件详解
<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>pcitc</groupId> <artifactId>pcitc-fbd</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>pcitc-fbd</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>corp-repo</id> <name>corp-repo</name> <url>http://10.238.29.164:3968/nexus/content/groups/public/</url> </repository> <repository> <id>oschina Releases</id> <name>oschina Releases</name> <url>http://maven.oschina.net/content/groups/public</url> </repository> </repositories> <properties> <tomcat.version>7.0.29</tomcat.version> <spring.version>4.0.2.RELEASE</spring.version> <shiro.version>1.2.2</shiro.version> <activiti.version>5.14</activiti.version> <slf4j.version>1.7.5</slf4j.version> <logback.version>1.0.13</logback.version> </properties> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>json</groupId> <artifactId>json</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/local-lib/json.jar</systemPath> </dependency> </dependencys> <build> <finalName>pcitc-fbd</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.1.6.v20100715</version> <configuration> <stopKey>stop</stopKey> <stopPort>5599</stopPort> <webAppConfig> <contextPath>/</contextPath><defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor> </webAppConfig> <scanIntervalSeconds>0</scanIntervalSeconds> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>8889</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://localhost/manager/text</url> <path>/</path> <server>tomcat</server> <username>admin</username> <password>admin</password> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven- plugin</artifactId> <version>1.1</version> </plugin> </plugins> </build></project>
对于这个pom文件:
首先:对整个项目的描述,包括自身的GAV三坐标,已经打包的方式,因为通过这样方式,会在maven的repository中建立相应的文件目录,方便寻找。
其次:对仓库的定义,其实这也可以在setting.xml文件进行定义。
然后:对共有属性的抽取,例如:版本号,若要修改,则只需改动一处。
然后:repository中选取相应的依赖的jar包,GAV三坐标定位,下面有相应的解释:
1. groupId:定义当前maven项目属于哪个项目
2. artifactId:定义实际项目中的某一个模块
3. version:定义当前项目的当前版本
4. packaging:定义当前项目的打包方式
5. scope:定义当前依赖jar保存的状态(dependency下)
中还引入了,它主要管理依赖的部署。目前可以使用5个值:
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar,不会随项目一起发布。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它,注意在进行maven-tomcat插件进行部署的时候,这种类型的jar不会被包到相应web项目/WEB-INF/lib目录下。
根据这些坐标,在maven库中可以找到唯一的jar包。
最后:就是plugins部分,这是个在任何开发工具中都会遇到的问题。这里通过配置文件的方式显得优雅多了。有了插件,我们就可以通过相应的配置文件或者命令来驱动它。
最终:我们如何将自己的jar包传入到本地仓库或者私服中,因为这样可以解决中system中jar包不能打包到项目/WEB-IN/lib目录下的问题。- 传入到本地repository:
mvn install:install-file -Dfile=D:\quartz-terracotta-bootstrap-2.2.2-SNAPSHOT.jar -DgroupId=org.quartz-scheduler.internal -DartifactId=quartz-terracotta-bootstrap -Dversion=2.2.2-SNAPSHOT -Dpackaging=jar
- 传入到mirror中:
mvn deploy:deploy-file -DgroupId=org.terracotta.toolkit -DartifactId=terracotta-toolkit-api-internal -Dversion=1.12 -Dpackaging=jar -Dfile=D:\terracotta-toolkit-api-internal-1.12.jar -Durl=http://ip:port/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
- 插件思想:在maven中将一个项目作为数据读入,然后将项目可以生成不同的表现形式的工程。而一个阶段到一个阶段都是一个插件的功能,这样解耦的思想能够将许多功能进行重用,而且达到了一个想用啥功能,就用啥功能的感觉。下面就是一个maven插件图:
通过不同的命令来制定进行插件的组合,以达到定制化的目的。主要命令有:- mvn compile 这个会在target目录中生成源代码对应的class文件。
- mvn clean 这个是用来清除target目录下面的内容
- mvn test 运行测试
- mvn install 在本地Repository中安装jar
- mvn -version/-v 显示版本信息
- mvn archetype:generate 创建mvn项目
- mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app 创建mvn项目
- mvn package 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
- mvn jetty:run 运行项目于jetty上,
- mvn compile 编译
- mvn tomcat7:deploy 进行tomcat热部署,但是一定要配置相应的插件,而且tomcat版本的不同,体现出不同的tomcat7中数字的不同
配置一个简单的MAVEN工程
这里可以下载一个maven或者直接用集成工具的maven插件。
1. Maven的安装
- Jdk必须1.6以上的版本
- 从http://maven.apache.org/官网上下载最新版本的maven
- 把下载下来的maven解压缩,然后有一个bin文件夹,这是一个bin的文件夹的目F:\work\course\maven\maven\bin把该目录追加到环境变量的path中。
- 利用命令行检查是否成功
- 先打开路径,把settings.xml文件复制到上述的路径中。例如:
F:\work\course\maven\apache-maven-3.0.5-bin\apache-maven-3.0.5\conf
有一个settings.xml文件,复制到C:\Users\Think.m2- 可以修改settings.xml文件,来设定本地repository和私服,但是一般在pom.xml中修改配置文件,因为这样全局的settings.xml会影响其他的maven工程。
- 指定本地仓库的路径:
<localRepository>F:/work/course/maven/mavenRepository/</localRepository>
私服仓库路径–百度 - Maven的配置
bin中存放可执行的二进制文件
conf存放settings.xml文件
lib 运行maven所依赖的jar包
- PASSION之MAVEN工程详解
- PASSION之XML详解
- PASSION之XML文档详解
- PASSION之Linux命令详解
- PASSION之SVN+MAVEN+TOMCAT+JENKINS配置易错处
- PASSION之初始SHELL
- PASSION之CSS3-outline
- PASSION之CSS定位
- PASSION之WEB监听器
- PASSION之Mybatis
- PASSION之ASSEMBLY(二)
- PASSION之ASSEMBLY(三)
- PASSION之ASSEMBLY(四)
- Passion
- Passion
- PASSION之CSS盒子模型
- PASSION之CSS常用操作
- PASSION之Logback(1)
- 怎样将应用程序最小化到托盘?
- 【剑指Offer面试题】 九度OJ1371:最小的K个数
- nodejs之socket.io模块——实现了websocket协议
- oracle glogin.sql 和login.sql使用
- 导入他人项目问题
- PASSION之MAVEN工程详解
- Android LayoutInflater深度解析 给你带来全新的认识
- os.walk 目录遍历
- 算法练习
- php魔术方法__clone()的运作机制检测程序。
- 【黑马程序员】Java笔记--反射
- HDU 3790 最短路径问题 裸跑dijkstra
- Android NDK 开发
- Power Strings POJ 2406【KMP Next的应用】