PASSION之MAVEN工程详解

来源:互联网 发布:杭州淘宝收费拍摄地点 编辑:程序博客网 时间:2024/05/16 06:24

什么是maven?

maven就是一个项目管理工具,这个软件体现了许多思想。比如:插件思想,规范大于编码,继承等。软件就是读取数据,加工数据,得到想要的结果。

maven相关解读

  • 规定大于编码思想:在科学的世界,总是要求是在某个规定下进行发挥,就像数学题的前提条件一样。这里maven的规范是,你若想利用maven这个工具帮你干活。那么,你的工程目录结构必须是一下规范:

    1. src/main/java 存放项目的java文件
    2. src/main/resources 存放项目的资源文件,如spring,hibernate的 配置文件
    3. src/test/java 存放所有的测试的java文件
    4. src/test/resources 存放测试用的资源文件
    5. target 项目输出位置,一般只看下面生成的war包
    6. pom.xml 文件
      这样其实就构建了POM对象模型,而表述的语言就是pom.xml文件中xml语言,因为xml语言是人类和计算机交互的利器。故一般用当做配置文件,而且有了xsd或者tdt规范。
      这里写图片描述
      上面的图片就很好解释maven整个软件的架构,可以看出这就是一般软件的优秀架构。maven根据pom.xml文件,把它转化成项目对象模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包。在clean,compile,test,package等阶段都有相应的Plug-in来做这些事情。而这些plug-in会产生一些中间产物。

    7. 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插件图:
    这里写图片描述
    通过不同的命令来制定进行插件的组合,以达到定制化的目的。主要命令有:
    1. mvn compile 这个会在target目录中生成源代码对应的class文件。
    2. mvn clean 这个是用来清除target目录下面的内容
    3. mvn test 运行测试
    4. mvn install 在本地Repository中安装jar
    5. mvn -version/-v 显示版本信息
    6. mvn archetype:generate 创建mvn项目
    7. mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app 创建mvn项目
    8. mvn package 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
    9. mvn jetty:run 运行项目于jetty上,
    10. mvn compile 编译
    11. 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包
0 0
原创粉丝点击