了解

maven是一款服务于java平台的自动化构建工具(项目管理工具)

构建:全方位、多角度、深层次地建立

项目构建是一个项目从:源代码、编译、测试、打包、部署、运行的过程

用来解决团队开发遇到的问题

如: 统一 jar包 统一配置文件,单元测试 的代码位置即 目录结构的统一

传统的项目构建过程

1)在eclipse中创建一个java web工程

2)在工程中编写源代码及配置文件等

3)对源代码进行编译,java文件编译成class文件

4)执行Junit单元测试

5)将工程打成war包部署至tomcat运行

maven项目 构建过程

maven将项目构建的过程进行标准化,每个阶段使用一个命令完成

优点:

  1. 一个命令完成构建、运行,方便快捷。
  2. maven对每个构建阶段进行规范,非常有利于大型团队协作开发。

1.3 什么是依赖管理

什么是依赖?一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。

什么是依赖管理?就是对项目所有依赖的jar包进行规范化管理。



总结使用maven的好处

  1. 一步构建 命令执行,标准化
  2. 依赖管理 安全又方便
  3. 跨平台 电脑 手机都可用
  4. 团队开发 有规程 效率高,成本低 大家都喜欢用它

核心文件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>com.xrq.withmaven</groupId>

<artifactId>withmaven</artifactId>

<version>0.0.1-SNAPSHOT</version>

<build/>

</project>

1、modelVersion

指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0

2、groupId

顾名思义,这个应该是公司名或是组织名。一般来说groupId是由三个部分组成,每个部分之间以".“分隔,第一部分是项目用途,比如用于商业的就是"com”,用于非营利性组织的就  是"org";第二部分是公司名, 如"tengxun"、“baidu”、“alibaba”;第三部分是你的项目名

3、artifactId

可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式

4、version

版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,这非常重要,我在使用和研究Maven的时候多次感受到了这点。

在上面的这些元素之外,还有一些元素,同样罗列一下:

1、packing

项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar

2、dependencies和dependency

前者包含后者。前面说了,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。

本地仓库和远程仓库的概念 如下
* 本地仓库
* 远程仓库
* 中央仓库
* 私服 //自己的架构包 放在上面
* 其他公共库 //别人的

本地仓库 执行maven命令时才创建

maven 本地储存的位置,有很多架构包

官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;



setting.xml:

改两个地方

  1. 确定 本地仓库位置
<localRepository>E:\maven\repository</localRepository>
  1. 为了提高下载速度而 配置的阿里云镜像
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

MyEclipse默认的本地仓库的地址在**"{user.home}/.m2/repository"路径下**,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。

安装 配置环境

首先去Maven官网,下载Maven的包,地址为http://maven.apache.org/download.cgi,找到下面的部分,点击就可以下载

将maven解压到一个不含有中文和空格的目录中。

  • bin目录 mvn.bat (以run方式运行项目)、 mvnDebug.bat(以debug方式运行项目 )

  • boot目录 maven运行需要类加载器

  • conf目录 settings.xml 整个maven工具核心配置文件

  • lib目录 maven运行依赖jar包

  • 电脑上需安装java环境,安装JDK1.7 + 版本 (将JAVA_HOME/bin 配置环境变量path )

    配置 MAVEN_HOME

  • %MAVEN_HOME%/bin 加入环境变量 path

  • mvn -v命令检查 maven是否安装成功

maven仓库的作用

本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。



优先从本地仓库查找

默认本地仓库位置在 user.dir/.m2/repository, {user.dir}/.m2/repository," role="presentation" style="position: relative;">user.dir/.m2/repository,user.dir/.m2/repository, {user.dir}/.m2/repository,user.dir/.m2/repository,{user.dir}表示windows用户目录。

远程仓库

如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。

远程仓库可以在互联网内也可以在局域网内。

中央仓库

在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

定义maven坐标

每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义,比如:入门程序的坐标定义如下:

<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>cn.atcast.maven</groupId> <!-- 模块名称 -->

<artifactId>maven-first</artifactId>

<!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->

<version>0.0.1-SNAPSHOT</version>

<packaging > :打包类型

jar:执行package会打成jar包

war:执行package会打成war包

pom :用于maven工程的继承,通常父工程设置为pom

第一个maven

需求

创建一个web工程,实现入门程序的功能。

1)添加index.jsp,输出hello world

2)添加一个servlet转发到jsp页面。

① 创建约定的目录结构(maven工程必须按照约定的目录结构创建)

根目录:工程名

|—src:源码

|—|---main:存放主程序

|—|---|—java:java源码文件

|—|---|—resource:存放框架的配置文件

|—|---test:存放测试程序

|—pop.xml:maven的核心配置文件

我们按照上面的文件夹目录结构手动创建一下,不用任何IDE环境(手动的其实最有助于我们理解maven)



出错:





项目的结构 也不对 检查配置 和setting.xml 是否出错

pom.xml报错

缺少 web.xml----aa\src\main\webapp\WEB-INF

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.atcast.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping> </web-app>

NewFile.xml报错 (新建一个xml 显示123123)

解决:

1.



2.



3. pom.xml 包配置+ 添加servelt/jsp的包

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependencies<span class="token operator">&gt;</span>

目录

问题解决 后 让他跑起来吧

–>Run As

案例二:

①、配置

选择菜单windows–>preferences(参数)–>maven



选择Installations(安装),添加你自己下载并解压好的maven目录。并打上对勾 √,点击Apply(应用)

再选择User Settings目录,在User Settings中选择Browse(浏览),选择你自己maven里的conf下的settings.xml文件。



插一句:settings.xml这个配置文件,主要是配置你本地仓库的路径的。不想使用默认路径,就打开文件,加上自己的路径配置。

**<localRepository>C:Program FilesJavarepository</localRepository>
到此,maven整个的设置就OK了。**

项目就创建完成后,但是jdk的版本还有sevlet-api等jar包还没有

选择创建好的工程单击右键,选择properties 并找到 Java Build Path,把jdk的版本选择你电脑上的正确的jdk版本。

选择创建好的工程单击右键,选择properties 并找到 Project Facets,版本选择3.1,下面的java版本选择1.8,点击Apply



选择创建好的工程单击右键,找到build path



找到Libaries,添加Tomcat8.5的依赖库,点击OK

错误解决

1.手动安装Eclipse maven-archetype-quickstart

下载

C:\Users\DELL

然后从CMD里手动安装。

mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=X.X -Dpackaging=jar -Dfile=maven-archetype-quickstart-1.1.jar



2



解决一:



解决二:

案例三(创建一个service)

我们在之前(案例一)的基础上 在web.xml文件 配置一下

    <servlet>
<description></description>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.atcast.web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>



Run As---->Maven build

POM文件内容:(重点)

定义:

pom: 项目对象模型 ,是一个 XML 文件 包含了对象是 使用maven来构建 ,每个项目只有一个pom.xml文件

概念:父POM 类似Object类

<?xml version="1.0" ?>
<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>
&lt;groupId&gt;com.hzg.maven&lt;/groupId&gt;
&lt;artifactId&gt;Hello&lt;/artifactId&gt;
&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; 工程版本号 &lt;name&gt;Hello&lt;/name&gt;

<url>http://maven.apache.org</url>

project:工程的根标签

modelVersion:pom模板版本

groupId:组织标识 (一般唯一)

artifactId:工程名称

packaging:打包方式:JAR ,WAR ,EAR 三种

//依赖配置信息
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
<build>
<finalName>WebMavenDem</finalName>
</build>
</project>

parnt 父项目的信息

modules 模块

properties 定义pom变量 类似 int a;

dependencyManageMent 有多模块时,统一子项目使用依赖项的同一版本 ,同时有了父模块后 ,子模块 就不会优先引用对应依赖 .同时 修改时 也只要改父类就可以了.

常用maven命令

执行maven命令必须进入到pom.xml的目录中进行执行



进入到项目的pom.xml目录之后,就可以执行啦。

1、运行 mvn compile

OK,运行完毕,你在pom.xml配置的依赖的包已经导入到仓库了,问题来了,仓库默认的位置在哪?

仓库的默认位置:c:Usrs[登录当前系统的用户名].m2repository

刚才执行完compile之后,之前的文件夹发生了变化

我们发现Hello项目里里多了一个target文件夹。文件夹的内容为:

发现target里主要存放的就是编译后的字节码文件

2、运行mvn test-compile,target文件夹下面除了classes之外多了test-classes文件夹

3、运行mvn package,target文件夹下面又多了一个打好的jar包

在这里插入图片描述

4、运行mvn clean,发现整个target文件夹都没了。又回到了编译之前我们手动创建的文件夹

五、仓库和坐标

pom.xml:Project Object Model 项目对象模型。它是maven的核心配置文件,所有的构建的配置都在这里设置。

② 坐标:使用下面的三个向量在仓库中唯一的定位一个maven工程



< packaging > :打包类型

jar:执行package会打成jar包

war:执行package会打成war包

pom :用于maven工程的继承,通常父工程设置为pom

③ maven工程的坐标与仓库中路径的关系:

maven坐标和仓库对应的映射关系:[ groupId ] [ artifactId ][version][artifactId]-[version].jar

去本地仓库看一下此目录:orgspringframeworkspring-core4.3.4.RELEASEspring-core-4.3.4.RELEASE.jar

果然是完全对应的

<project > :文件的根节点 .
<modelversion > : pom.xml使用的对象模型版本
<groupId > :项目名称,一般写项目的域名
<artifactId > :模块名称,子项目名或模块名称
<version > :产品的版本号 .
<packaging > :打包类型,一般有jar、war、pom 等
<name > :项目的显示名,常用于 Maven 生成的文档。
<description > :项目描述,常用于 Maven 生成的文档
<dependencies> :项目依赖构件配置,配置项目依赖构件的坐标
<build> :项目构建配置,配置编译、运行插件等。

六、依赖

① maven解析依赖信息时会到本地仓库中取查找被依赖的jar包

对于本地仓库中没有的会去中央仓库去查找maven坐标来获取jar包,获取到jar之后会下载到本地仓库

对于中央仓库也找不到依赖的jar包的时候,就会编译失败了

② 如果依赖的是自己或者团队开发的maven工程,需要先使用install命令把被依赖的maven工程的jar包导入到本地仓库中

举例:现在我再创建第二个maven工程HelloFriend,其中用到了第一个Hello工程里类的sayHello(String name)方法。我们在给HelloFriend项目使用 mvn compile命令进行编译的时候,会提示缺少依赖Hello的jar包。怎么办呢?

到第一个maven工程中执行 mvn install后,你再去看一下本地仓库,你会发现有了Hello项目的jar包。一旦本地仓库有了依赖的maven工程的jar包后,你再到HelloFriend项目中使用 mvn compile命令的时候,可以成功编译

③ 依赖范围





scope就是依赖的范围

七、生命周期

Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。Clean生命周期一共包含了三个阶段:

pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

validate 验证工程是否正确(编译)
generate-sources
process-resources 复制并处理资源文件,至目标目录,准备打包
compile 编译项目的源代码
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录
test-compile 编译测试源代码
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
prepare-package
package 接受编译好的代码,打包成可发布的格式,
pre-integration-test
integration-test
post-integration-test
verify 运行所有检查,验证包是否有效
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享

那我们在Hello的项目中执行 mvn install 命令,通过日志看看中间经历了什么?



通过日志我们发现,其实执行mvn install,其中已经执行了compile 和 test 。

总结:不论你要执行生命周期的哪一个阶段,maven都是从这个生命周期的开始执行

插件:每个阶段都有插件(plugin),看上面标红的。插件的职责就是执行它对应的命令。

Site Lifecycle 生成项目报告,站点,发布站点。

pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上

九、maven工程的依赖高级特性

① 依赖的传递性



WebMavenDemo项目依赖JavaMavenService1 JavaMavenService1项目依赖JavaMavenService2

pom.xml文件配置好依赖关系后,必须首先mvn install后,依赖的jar包才能使用。

WebMavenDemo的pom.xml文件想能编译通过,JavaMavenService1必须mvn install

JavaMavenService的pom.xml文件想能编译通过,JavaMavenService2必须mvn install

传递性:

在Eclipse中,为JavaMavenService2中增加了一个spring-core.jar包后,会惊喜的发现依赖的两个项目都自动的增加了这个jar包,这就是依赖的传递性。

注意:非compile范围的依赖是不能传递的。

② 依赖版本的原则:

1、路径最短者优先原则

Service2的log4j的版本是1.2.7版本,Service1排除了此包的依赖,自己加了一个Log4j的1.2.9的版本,那么WebMavenDemo项目遵守路径最短优先原则,Log4j的版本和Sercive1的版本一致。

2、路径相同先声明优先原则

这种场景依赖关系发生了变化,WebMavenDemo项目依赖Sercive1和Service2,它俩是同一个路径,那么谁在WebMavenDemo的pom.xml中先声明的依赖就用谁的版本。

③ 统一管理依赖的版本:



为了统一管理版本号,可以使用properties标签,里面可以自定义版本的标签名。在使用的地方使用${自定义标签名}

build配置

<build>
  <!-- 项目的名字 -->
  <finalName>WebMavenDemo</finalName>
  <!-- 描述项目中资源的位置 -->
  <resources>
    <!-- 自定义资源1 -->
    <resource>
      <!-- 资源目录 -->
      <directory>src/main/java</directory>
      <!-- 包括哪些文件参与打包 -->
      <includes>
        <include>**/*.xml</include>
      </includes>
      <!-- 排除哪些文件不参与打包 -->
      <excludes>
        <exclude>**/*.txt</exclude>
          <exclude>**/*.doc</exclude>
      </excludes>
    </resource>
  </resources>
  <!-- 设置构建时候的插件 -->
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <!-- 源代码编译版本 -->
        <source>1.8</source>
        <!-- 目标平台编译版本 -->
        <target>1.8</target>
      </configuration>
    </plugin>
    <!-- 资源插件(资源的插件) -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.1</version>
      <executions>
        <execution>
          <phase>compile</phase>
        </execution>
      </executions>
      <configuration>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
    <!-- war插件(将项目打成war包) -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.1</version>
      <configuration>
        <!-- war包名字 -->
        <warName>WebMavenDemo1</warName>
      </configuration>
    </plugin>
  </plugins>
</build>



配置好build后,执行mvn package之后,在maven工程指定的target目录里war包和文件都按照配置的生成了

加入第三方架包

Maven私服

  1. 问题:项目组编写了一个通用的工具类,其它项目组将类拷贝过去使用,当工具类修改bug后通过邮件发送给各各项目组,这种分发机制不规范可能导致工具类版本不统一。

解决方案:项目组将写的工具类通过maven构建,打成jar,将jar包发布到公司的maven仓库中(私服),公司其它项目通过maven依赖管理从仓库自动下载jar包。

私服(用于jar的发布 和下载)

  1. 公司在自己的局域网内搭建自己的远程仓库服务器,称为私服私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。

  2. 私服还充当一个代理服务器,当私服上没有jar包会从互联网中央仓库自动下载

依赖版本冲突

依赖版本冲突:当一个项目依赖的构件比较多时,它们相互之前存在依赖,当你需要对依赖版本统一管理时如果让maven自动来处理可能并不能如你所愿,如下例子:

(传递依赖:当A 依赖B、B依赖C,在A中导入B后会自动导入C,C是A的传递依赖,如果C依赖D则D也可能是A的传递依赖。)

<!-- struts2-spring-plugin依赖spirng-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<!-- spring-context依赖spring-beans-4.2.4 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

org.apache.struts依赖spirng-beans-3.0.5,spring-context依赖spring-beans-4.2.4,但是发现spirng-beans-3.0.5加入到工程中,而我们希望spring-beans-4.2.4加入工程。

依赖调解原则

maven自动按照下边的原则调解:

声明者优先原则

在pom文件定义依赖,先声明的依赖为准。

测试:

如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。

分析:

由于spring-context在前边,以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到了工程中。

排除依赖

上边的问题也可以通过排除依赖方法辅助依赖调解,如下:

比如在依赖struts2-spring-plugin的设置中添加排除依赖,排除spring-beans,

下边的配置表示:依赖struts2-spring-plugin,但排除struts2-spring-plugin所依赖的

spring-beans。

<!-- struts2-spring-plugin依赖spirng-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
<!-- 排除 spring-beans-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>

锁定版本

面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。

首先父工程中pom.xml文件添加

如下的配置是锁定了spring-beans和spring-context的版本:

最后推荐个最新最全的maven依赖项版本查询网站:

http://mvnrepository.com/


  1. 创建 maven maven-archetype-quickstart 项目抱错问题解决方法

  2. Archetype,骨架的意思。

    文章出处:http://m.blog.csdn.net/blog/FireOfStar/42526027

    Archetype是什么?

    简单的说,Archetype是Maven工程的模板工具包。一个Archetype定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成Maven工程的方式。Archetype会帮助作者给用户创建Maven工程模板,并给用户提供生成相关工程模板版本的参数化方法。

    使用Archetype提供的好的方法,是开发者能够使用最佳实践来快速的构建和组织一致化的工程。在Maven工程中,我们努力使用Archetype来尽可能快的给用户提供示例工程,同时也会把Maven的最佳实践介绍给新的用户。一个新的用户可以使用工作中的Maven工作作为跳板来研究更过的Maven中功能。我们也可以使用Archetype的添加机制,这样就意味着允许我们抓取Archetype中项目片段,并把它们添加到既存的工程中。Maven网站的Archetype就是很好的例子。例如,你可以使用“quick start archetype”来生成一个工程,然后就可以通过其中既存的“site archetype”来快速的创建一个网址工程。你能够使用Archetype来做很多这样的事情。

    在你的团队中可能想要标准化的J2EE开发,这需要你提供EJBs、或者是WARs、或者是Web services的原型。一旦在你团队资源库中创建和部署这些原型,它们就可以在你团队内共享使用。

    如何使用Archetype

    要基于Archetype来创建一个新的工程,需要像下面示例这样来调用:

mvn archetype:generate

已有的Archetypes

Archetype ID

说明

maven-archetype-archetype

一个样例原型

maven-archetype-j2ee-simple

简单的J2EE应用程序样例

maven-archetype-mojo

Maven插件样本的示例

maven-archetype-plugin

Maven插件样本

maven-archetype-plugin-site

Mave插件网站的样例

maven-archetype-portlet

JSR-268门户样例

maven-archetype-quickstart

Maven工程样例

maven-archetype-simple

一个简单的Maven工程

maven-archetype-site

Maven网站的样例,它演示了对诸如APT、XDoc和FML等文档类型的支持,并演示了如果把网站国际化(i18n)

maven-archetype-site-simple

Maven网站样例

maven-archetype-webapp

Maven的Webapp工程样例

常用Archetype

1,maven-archetype-quickstart

默认的Archetype,基本内容包括:

一个包含junit依赖声明的pom.xml

src/main/java主代码目录及一个名为App的类

src/test/java测试代码目录及一个名为AppTest的测试用例

2,maven-archetype-webapp

一个最简单的Maven war项目模板,当需要快速创建一个Web应用的时候可以使用它。生成的项目内容包括:

一个packaging为war且带有junit依赖声明的pom.xml

src/main/webapp/目录

src/main/webapp/index.jsp文件

src/main/webapp/WEB-INF/web.xml文件

pom.xml 配置文件 如果第一次的话 可以复制下来 帮助你下载完整插件 最后检查 对不对标志(目录结构是否正确)

<?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/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion> <groupId>com.alipay.test</groupId>

<artifactId>test</artifactId>

<version>1.0-SNAPSHOT</version> <name>test</name>

<!-- FIXME change it to the project's website -->

<url>http://www.example.com</url> <properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.7</maven.compiler.source>

<maven.compiler.target>1.7</maven.compiler.target>

</properties> <dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>logging<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>logging<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">1.2</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span> <span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>com<span class="token punctuation">.</span>alipay<span class="token punctuation">.</span>sdk<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>alipay<span class="token operator">-</span>sdk<span class="token operator">-</span>java<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">3.0</span><span class="token number">.0</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>exclusions<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>exclusion<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>logging<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>logging<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>exclusion<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>exclusions<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>lang<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>lang<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">2.6</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>configuration<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>configuration<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">1.10</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>exclusions<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>exclusion<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>logging<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>logging<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>exclusion<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>exclusions<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>codec<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>commons<span class="token operator">-</span>codec<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">1.11</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>com<span class="token punctuation">.</span>google<span class="token punctuation">.</span>zxing<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>core<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">3.2</span><span class="token number">.1</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>org<span class="token punctuation">.</span>hamcrest<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>hamcrest<span class="token operator">-</span>core<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">1.3</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>scope<span class="token operator">&gt;</span>test<span class="token operator">&lt;</span><span class="token operator">/</span>scope<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>dependency<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>groupId<span class="token operator">&gt;</span>com<span class="token punctuation">.</span>google<span class="token punctuation">.</span>code<span class="token punctuation">.</span>gson<span class="token operator">&lt;</span><span class="token operator">/</span>groupId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>artifactId<span class="token operator">&gt;</span>gson<span class="token operator">&lt;</span><span class="token operator">/</span>artifactId<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>version<span class="token operator">&gt;</span><span class="token number">2.8</span><span class="token number">.5</span><span class="token operator">&lt;</span><span class="token operator">/</span>version<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>dependency<span class="token operator">&gt;</span>

</dependencies>

<build>

<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->

<plugins>

<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->

<plugin>

<artifactId>maven-clean-plugin</artifactId>

<version>3.1.0</version>

</plugin>

<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->

<plugin>

<artifactId>maven-resources-plugin</artifactId>

<version>3.0.2</version>

</plugin>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.8.0</version>

</plugin>

<plugin>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.22.1</version>

</plugin>

<plugin>

<artifactId>maven-jar-plugin</artifactId>

<version>3.0.2</version>

</plugin>

<plugin>

<artifactId>maven-install-plugin</artifactId>

<version>2.5.2</version>

</plugin>

<plugin>

<artifactId>maven-deploy-plugin</artifactId>

<version>2.8.2</version>

</plugin>

<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->

<plugin>

<artifactId>maven-site-plugin</artifactId>

<version>3.7.1</version>

</plugin>

<plugin>

<artifactId>maven-project-info-reports-plugin</artifactId>

<version>3.0.0</version>

</plugin>

</plugins>

</pluginManagement>

</build>

</project>

原文地址:https://blog.csdn.net/qq_39088066/article/details/101294451

Maven 初学+http://mvnrepository.com/的更多相关文章

  1. maven初学(二)archeType插件使用

    archeType是一个maven插件,它的主要功能是根据模板来创建工程结构 创建工程结构: 1,创建工程目录 2,输入命令:mvn archetype:generate 3,选择需要的archety ...

  2. Maven 初学(一)基本概念

    Pom中有三个主要元素 Groupid,artifactid,version goupid 是一个组织唯一的标识  例如 com.ibm.www artifactid  是一个工程呢ID        ...

  3. Maven初学之经验浅谈

    关于Maven这个东西,我不做任何评价. 直接上资料,适合初学者 推荐资料 http://www.imooc.com/learn/443 www.imooc.com/article/15037 还有个 ...

  4. eclipse创建maven——初学

    1.进入eclipse→File→new→other→搜索maven,如下图: 2.选择一个工作空间,点击Next 3.进入如下页面 4.填写Grop id和Artifact id,Version默认 ...

  5. maven初学(三) SNAPSHOT

    使用场景: 通常一个大型软件是由多个模块组成的,不同的组使用相同应用的不同版本. 在开发阶段,可能经常需要修复bug和优化. 这种情况下就会导致其他组频繁更新代码和pom文件 SANPSHOT SNA ...

  6. Maven初学

    先上几张霸气的图:

  7. aliyun阿里云Maven仓库地址——加速你的maven构建

    maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度提升100倍. http://maven.aliyun.com/nexus/#view-reposito ...

  8. maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项

    一.指定编译文件的编码 maven-compile-plugin <plugin> <groupId>org.apache.maven.plugins</groupId& ...

  9. maven jar包库

    如果你的项目不是maven项目,比如ant,你的项目需要某些jar包的时候可以到maven 的jar包中心库下载 地址:http://search.maven.org/ http://mvnrepos ...

随机推荐

  1. <每日 1 OJ> -LeetCode 13 . 罗马数字转正数

    题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 ...

  2. [源码分析]HashSet 和LinkedHashSet

    特性 HashSet是一个可存储不重复元素的容器,底层实现依赖 HashMap,所以在添加,删除,查找元素时的时间复杂度均为 O(1). 构造方法,初始化内部的HashMap public HashS ...

  3. Java虚拟机解释器与JIT编译器

    一.JAVA编译相关概念 1.动态编译(dynamic compilation)指的是“在运行时进行编译”:与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫 ...

  4. Vue 与 动态组件 import 的尝试

    <template> <component :is='fuck' :data='data'></component> </template> <s ...

  5. pandas连接多个表格concat()函数

    网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...

  6. 如何防止Hangfire重复作业在连续执行30分钟后重新启动(How to prevent a Hangfire recurring job from restarting after 30 minutes of continuous execution)

    var options = new SqlServerStorageOptions { InvisibilityTimeout = TimeSpan .FromMinutes(30)//默认值}; G ...

  7. 请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?

    using dotNET.Core; using Microsoft.Extensions.Logging; using System; using System.Collections.Generi ...

  8. scrapy中的Pipeline

    当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline都是实现了简单方法的Pyth ...

  9. oracle 导出,导入表

    导出 exp DZQZ/DZQZ@orcl file=D:/DZQZ.dmp log=D:/DZQZ.log 导入 imp DZQZ/DZQZ@orcl file=D:\电子取证\DZQZ.dmp f ...

  10. qt model/view/delegate

    Qt Model/View理解(一)---构造model https://blog.csdn.net/weixin_42303052/article/details/89233887 Qt Model ...