maven知识结构笔记

1.什么是maven

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

maven功能
    构建
    文档生成
    报告
    依赖
    SCMs
    发布
    分发
    邮件列表

约定配置 
    Maven提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。

Maven 特点
    项目设置遵循统一的规则。
    任意工程中共享。
    依赖管理包括自动更新。
    一个庞大且不断增长的库。
    可扩展,能够轻松编写 Java 或脚本语言的插件。
    只需很少或不需要额外配置即可即时访问新功能。
    基于模型的构建 − Maven能够将任意数量的项目构建到预定义的输出类型中,如 JAR,WAR 或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本。
    项目信息的一致性站点 − 使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。
    发布管理和发布单独的输出 − Maven 将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven 能够发布单独的输出,如 JAR,包含其他依赖和文档的归档,或者作为源代码发布。
    向后兼容性 − 您可以很轻松的从旧版本 Maven 的多个模块移植到 Maven 3 中。
    子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号,
    并行构建 − 编译的速度能普遍提高20 - 50 %。
    更好的错误报告 − Maven 改进了错误报告,它为您提供了 Maven wiki 页面的链接,您可以点击链接查看错误的完整描述。

2.maven环境配置

1.Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK;
2.windows/linux&mac 安装包、环境变量略有不同;

3.pom文件解析

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置:
    项目依赖
    插件
    执行目标
    项目构建 profile
    项目版本
    项目开发者列表
    相关邮件列表信息

具体查询菜鸟教材

4.Maven构建生命周期

1.Maven 有以下三个标准的生命周期:
    clean:项目清理的处理
    default(或 build):项目部署的处理(验证validate、编译compile、测试test、包装package、检查verify、安装install、部署deploy)
    site:项目站点文档创建的处理(没有用过)
    
注意:构建阶段由插件目标构成,怎么解释呢?  
一个插件目标代表一个特定的任务(比构建阶段更为精细),这有助于项目的构建和管理。这些目标可能被绑定到多个阶段或者无绑定。不绑定到任何构建阶段的目标可以在构建生命周期之外通过直接调用执行。这些目标的执行顺序取决于调用目标和构建阶段的顺序。

2.三个标准周期
    <1>clean周期
        细分的话,包括三个周期,pre-clean、clean、post-clean
        关于clean周期演示示例,下图

    <2>default(或 build)
        这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:validate(校验)->initialize(初始化)->...->compile(编译)->...->deploy(部署)

        有一些与 Maven 生命周期相关的重要概念需要说明:
            当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
            不同的 maven 目标将根据打包的类型(JAR / WAR / EAR),被绑定到不同的 Maven 生命周期阶段。

    <3>Site 生命周期
        Maven Site 插件一般用来创建新的报告文档、部署站点等。
            细分的话,包括四个周期,pre-site、site、post-site、site-deploy
            这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。(表示重来没用过)
   

5.构建配置文件(profile)

1.构建配置文件类型
构建配置文件大体上有三种类型:
类型	在哪定义
项目级(Per Project)	定义在项目的POM文件pom.xml中
用户级 (Per User)	定义在Maven的设置xml文件中 (%USER_HOME%/.m2/settings.xml)
全局(Global)	定义在 Maven 全局的设置 xml 文件中 (%M2_HOME%/conf/settings.xml)
 
2.配置文件激活
Maven的构建配置文件可以通过多种方式激活。
o	使用命令控制台输入显式激活。
o	通过 maven 设置。
o	基于环境变量(用户或者系统变量)。
o	操作系统设置(比如说,Windows系列)。
o	文件的存在或者缺失。

以下几个是不同激活方式(使用项目级别配置文件)
<1>********命令行参数激活方式*********
在pom.xml文件中使用<profiles>标签,封装多个build构建过程,然后利用不同的激活方式设置不用的激化条件调用对应的build过程。下面是教材的一个例子
-----------------------------
<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.jsoft.test</groupId>
  <artifactId>testproject</artifactId>
  <packaging>jar</packaging>
  <version>0.1-SNAPSHOT</version>
  <name>testproject</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
   <!-- 
   将该pom.xml文件放到任意目录,准备好测试文件123.txt等文件。
   -->
  <profiles>                           
      <profile>
          <id>test</id>     <!-- 命令行调用mvn test -Ptest   会执行这个构建过程 -->
          <build>             
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          <goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using env.test.properties</echo>
                             <copy file="D://temp//0119ceshi//from//123.txt" tofile="D://temp//0119ceshi//to//123.txt" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
      <profile>
          <id>normal</id>      <!-- 命令行调用mvn test -Pnormal   会执行这个构建过程 -->
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          <goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using env.properties</echo>
                             <copy file="D://temp//0119ceshi//from//1234.txt" tofile="D://temp//0119ceshi//to//1234.txt" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
      <profile>
          <id>prod</id>     <!-- 命令行调用mvn test -Pprod   会执行这个构建过程 -->
          <build>
              <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <executions>
                       <execution>
                          <phase>test</phase>
                          <goals>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using env.prod.properties</echo>
                             <copy file="D://temp//0119ceshi//from//12345.txt" tofile="D://temp//0119ceshi//to//12345.txt" overwrite="true"/>
                          </tasks>
                          </configuration>
                       </execution>
                    </executions>
                 </plugin>
              </plugins>
          </build>
      </profile>
   </profiles>
</project>
----------------------------

<2>********用户级或全局级别设置激活配置文件*********
这个还是接着上面的pom.xml配置,但不是在命令行中传递构建参数了,而是把构建环境条件设置在用户级别或全局级别的settings.xml文件中。把如下配置到%USER_HOME%/.m2/settings.xml或%M2_HOME%/conf/settings.xml中,直接执行mvn test即可。
<settings 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/xsd/settings-1.0.0.xsd"> ... 
<activeProfiles> 
<activeProfile>test</activeProfile>
</activeProfiles> 
</settings>
 
注意,
1.如果在命令中加入 -P参数  ,没有效果,还是会执行settings.xml文件中的设置。
2.%USER_HOME%/.m2/settings.xml或%M2_HOME%/conf/settings.xml中同时设置不同参数,哪个生效?试验后发现用户级别的设置会生效。不仅如此,对三个配置的优先级别进行了对比,发现:用户级别>命令级别>全局级别


<3>********通过环境变量激活配置文件*********
去掉%USER_HOME%/.m2/settings.xml或%M2_HOME%/conf/settings.xml中activeProfiles配置,修改pom.xml文件,加入<activation>标签:
<profile>
<id>test</id>
 <activation>
 <property> 
<name>env</name> 
<value>test</value> 
</property>
 </activation> 
<build>
…..
如果系统环境变量中设置env=test,就会激活对应的构建过程。当然可以在命令行中使用mvn test -Denv=test, 来模拟系统环境变量(突然相当之前在eclipse的tomcat中设置过环境变量)。

<4>********通过操作系统激活配置文件*********
同上,修改activation为指定操作系统作为激活条件,感觉很难用到
<activation>
 <os> 
    <name>Windows XP</name>
    <family>Windows</family> 
    <arch>x86</arch> 
    <version>5.1.2600</version>
 </os> 
</activation>

<5>********通过文件的存在或者缺失激活配置文件*********
同上是利用activation指定激活条件,感觉这个也很难用到
<activation> 
    <file> 
    <missing>target/generated-sources/axistools/wsdl2java/ com/companyname/group</missing> 
    </file> 
</activation>

6.仓库(repository)

1.仓库是什么?
    Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
    在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
    Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
    Maven 仓库有三种类型:
        o  本地(local)
        o  中央(central)
        o  远程(remote)
 
2.本地仓库
    Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
    运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
    默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。
    Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
        <localRepository>C:/MyLocalRepository</localRepository> 
    </settings>
    当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。
 
3.中央仓库
    中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
    中央仓库的关键概念:
        o	这个仓库由 Maven 社区管理。
        o	不需要配置。
        o	需要通过网络才能访问。
    要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。类似于常用mvn repository下载所需jar包。
 
 
4.远程仓库
    如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
    补充,maven依赖搜索顺序为本地仓库>中央仓库>远程仓库
 
5.配置阿里云远程仓库
    Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。(这句话的意思大概是说中央仓库在外面吧)
    第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上
    <mirrors> 
        <mirror> 
            <id>alimaven</id> <name>aliyun maven</name>
             <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
    第二步: pom.xml文件里添加:
    <repositories>
         <repository>
             <id>alimaven</id>
             <name>aliyun maven</name>
             <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
             <releases> <enabled>true</enabled> </releases>
             <snapshots> <enabled>false</enabled> </snapshots>
         </repository>
    </repositories>

7.插件(plugin)

1生命周期和插件
    Maven 有以下三个标准的生命周期:
        •	clean:项目清理的处理
        •	default(或 build):项目部署的处理
        •	site:项目站点文档创建的处理
    每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口,然后这些 phase 的实现由 Maven 的插件来完成。
    我们在输入 mvn 命令的时候 比如 mvn clean,clean 对应的就是 Clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 来实现的。
    所以说 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。
    Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
        •	创建 jar 文件
        •	创建 war 文件
        •	编译代码文件
        •	代码单元测试
        •	创建工程文档
        •	创建工程报告
    插件通常提供了一个目标(goal)的集合,并且可以使用下面的语法执行:<code>mvn [plugin-name]:[goal-name]</code>
 
2.插件类型
    Maven 提供了下面两种类型的插件:
        Build plugins	在构建时执行,并在 pom.xml 的 元素中配置。
        Reporting plugins	在网站生成过程中执行,并在 pom.xml 的 元素中配置。
 
3.插件使用注意
    •	插件是在 pom.xml 中使用 plugins 元素定义的。
    •	每个插件可以有多个目标。
    •	通过phase元素定义插件开始工作阶段。
    •	可以通过将要执行的任务绑定到插件的目标上。
    •	Maven 将下载本地仓库中获取不到的插件,并开始处理。

8.maven创建、构建Java项目

1.命令行创建maven项目
    Maven 使用原型" archetype 插件"创建项目。要创建一个简单的 Java 应用,我们将使用 maven-archetype-quickstart 插件。
    命令行切换到目标目录,执行命令mvn archetype:generate -DgroupId=com.just.common -DartifactId=common-utils -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
参数说明:
    o	-DgourpId: 组织名,公司网址的反写 + 项目名称
    o	-DartifactId: 项目名-模块名(这个最终是项目文件名)
    o	-DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用
    o	-DinteractiveMode: 是否使用交互模式

注意
    a.上面创建命令是不是有点长,感觉记起来很难受,当然也可以直接使用interactivemode=true模式,使用命令mvn archetype:generate即可。
    b.原型模版除了quickstart外,还有web项目模版插件maven-archetype-webapp,创建后目录结构多了src/main/webapp和src/main/resources目录

2.构建项目
    进入上一步项目common-utils目录中,执行mvn clean install,可以看见构建过程。
    构建后在项目目录下生成target目录内生成编译后文件、及生成jar包、最后在本地仓库生成该构建。

9.maven引入外部依赖

如果我们需要引入第三库文件到项目,该怎么操作呢?注意这个第三方文件不存证在于中央或远程库中;
这个时候需要这么做
(1)一般是先在 src 文件夹下添加 lib 文件夹,然后将你工程需要的 jar 文件复制到 lib 文件夹下。
(2)在pom.xml中添加依赖
<dependencies>
 <dependency> 
<groupId>ldapjdk</groupId>
           <artifactId>ldapjdk</artifactId>
          <version>1.0</version>
           <scope>system</scope>
        <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath> <!--这是关键--> 
 </dependency>
</dependencies>

10.项目文档

通过一个小实验测试该功能,毕竟不是常用核心功能
 
1.使用mavn archetype插件快速创建一个maven项目,如前面所述。
2.修改pom.xml文件,增加如下build配置,不然后面执行site插件会报错
<project> ... 
<build> 
<pluginManagement> 
<plugins> <plugin> 
<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.3</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.7</version> 
</plugin> </plugins> 
</pluginManagement> 
</build> ... 
</project>
 
3.修改完,在pom.xml所在目录执行命令mvn site命令,会在target目录下生成一个site目录,用浏览器打开index.html文件,可以查看项目文档。到目前为止没有使用过这种文档,这里简单了解一下site生命周期。

11.maven快照(snapshot)

1.什么是快照
    快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照。
    而对于普通版本,如果 Maven 以前下载过指定的版本文件,比如说 data-service:1.0,Maven 将不会再从仓库下载新的可用的 1.0 文件。若要下载更新的代码,data-service 的版本需要升到1.1。
2.虽然项目如果依赖快照版本的话,在构建时会检查有没有新的快照,但还可以强制下载最新快照版本,无论是否更新。执行命令就是加上-U , 即mvn clean package -U

12.maven自动化构建

1.自动化构建定义了这样一种场景: 在一个项目成功构建完成后,依赖它的相关工程即开始构建,这样可以保证其依赖项目的稳定。实现这种自动化构建有两种方式,第一基于maven插件invoker-plugin,另一个是使用第三方持续集成服务器(CI)。
 
2.基于maven插件的方式。假如app-web-ui和app-desktop-ui两个项目都依赖bus-core-api项目,在bus-core-api项目的pom.xml的构建文件中配置为如下,可以在bus-core-api项目构建完后,触发另外两个项目的构建
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> 
    <groupId>bus-core-api</groupId> 
    <artifactId>bus-core-api</artifactId>
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <build>
        <plugins> 
            <plugin> 
                <artifactId>maven-invoker-plugin</artifactId> 
                <version>1.6</version> 
                <configuration>
                    <debug>true</debug> 
                    <pomIncludes> 
                        <pomInclude>app-web-ui/pom.xml</pomInclude>
                        <pomInclude>app-desktop-ui/pom.xml</pomInclude>
                    </pomIncludes>
                </configuration>
                <executions> 
                    <execution> 
                        <id>build</id>
                        <goals> <goal>run</goal> </goals> 
                    </execution> 
                </executions> 
            </plugin>
         </plugins>
     <build>
 </project>
 
3.基于CI工具,就不需要在pom.xml文件中配置了,如CI服务器Hudson 把每个项目构建当成一次任务。在一个项目的代码提交到 SVN (或者任何映射到 Hudson 的代码管理工具)后,Hudson 将开始项目的构建任务,并且一旦此构建任务完成,Hudson 将自动启动其他依赖项目的构建。

13.依赖管理

1.Maven 一个核心的特性就是依赖管理,依赖原则
    <1>路径相同时:在同一个pom.xml中,有两个相同的依赖(仅版本不一致):后面声明的会覆盖前面的。不同的pom.xml中(都是引进来的jar),前面声明过了,后面将不会起作用。
    <2>路径不通时,遵循最短原则。注意这里路径就是依赖树。
 
2.可传递性依赖
    一种相当常见的情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。
    Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。
    我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。其他的事情 Maven 会帮我们搞定。
    通过可传递性的依赖,所有被包含的库的图形会快速的增长。当有重复库时,可能出现的情形将会持续上升。Maven 提供一些功能来控制可传递的依赖的程度。
 
3.控制可传递的依赖的程度
    <1>依赖原则解决依赖冲突问题。
    <2>使用依赖范围scope(有待理解)
        编译阶段compile,默认值
        供应阶段provide,该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。
        运行阶段,该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。
        测试阶段test,该范围表明相关依赖只在测试编译阶段和执行阶段。
        系统阶段,该范围表明你需要提供一个系统路径。
        导入阶段,该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前项目的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。
 
    <3>依赖排除exclusion
        已经传递了,这个被动排除。
 
    <4>依赖可选optional
        主动防止传递,但在<dependencyManagement>统一控制版本的情况下会失效。
 
4.继承依赖(父pom.xml依赖的,子pom.xml也依赖)(非来自菜鸟教材)
    1.创建父工程 父工程的打包方式选择pom(pom工程用在父级工程或聚合工程中。用来做jar包的版本控制。)
    2.在父工程的pom.xml中依赖需要写在:<dependencyManagement></dependencyManagement>中
    3.在子工程的pom.xml中需要写<parent>...</parent>
    4.在子类中需要声明:要使用父类的哪些依赖

14.自动化部署

1.自动化部署功能有
    •	使用 SubVersion, 源码仓库来管理源代码
    •	使用 Maven 构建和发布项目
    •	使用远程仓库管理软件(Jfrog或者Nexus) 来管理项目二进制文件。
 
2.pom.xml配置
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> 
    <groupId>bus-core-api</groupId> 
    <artifactId>bus-core-api</artifactId>
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <scm> <url>http://www.svn.com</url> <connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/ Framework</connection>         <developerConnection>scm:svn:${username}/${password}@localhost:8080: common_core_api:1101:code</developerConnection> 
    </scm>
 
    <distributionManagement> <repository> <id>Core-API-Java-Release</id> <name>Release repository</name> <url>http://localhost:8081/nexus/content/repositories/ Core-Api-Release</url> </repository> 
    </distributionManagement>

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.0-beta-9</version> <configuration> <useReleaseProfile>false</useReleaseProfile> <goals>deploy</goals> <scmCommentPrefix>[bus-core-api-release-checkin]-< /scmCommentPrefix> </configuration> </plugin> </plugins>             
    </build> 

</project>
 
在 pom.xml 文件中,我们常用到的一些重要元素节点如下表所示:
    Scm : 配置 SVN 的路径,Maven 将从该路径下将代码取下来。
    Repository : 构建的 WAR 或 EAR 或JAR 文件的位置,或者其他源码构建成功后生成的构件的存储位置。
    Plugin : 配置 maven-release-plugin 插件来实现自动部署过程。
 
3.问题
    不知jenkins怎么用的maven,有空看看运行日志吧

15.ide中使用maven

1.eclipse中使用插件m2eclipse来使用maven功能,最新的ide已经集成了maven功能,不需要插件了。m2eclipse的一些特点:
    •	可以在 Eclipse 环境上运行 Maven 的目标文件。
    •	可以使用其自带的控制台在 Eclipse 中直接查看 Maven 命令的输出。
    •	可以在 IDE 下更新 Maven 的依赖关系。
    •	可以使用 Eclipse 开展 Maven 项目的构建。
    •	Eclipse 基于 Maven 的 pom.xml 来实现自动化管理依赖关系。
    •	它解决了 Maven 与 Eclipse 的工作空间之间的依赖,而不需要安装到本地 Maven 的存储库(需要依赖项目在同一个工作区)。
    •	它可以自动地从远端的 Maven 库中下载所需要的依赖以及源码。
    •	它提供了向导,为建立新 Maven 项目,pom.xml 以及在已有的项目上开启 Maven 支持。
    •	它提供了远端的 Maven 存储库的依赖的快速搜索。
 
2.idea
    IntelliJ IDEA 已经内建了对 Maven 的支持。
posted on 2020-01-17 13:50  火枪  阅读(222)  评论(0编辑  收藏  举报