Maven 基本概念——根目录、项目创建、坐标(一)

1. MavenProjectRoot(项目根目录)

  • src
    • main
      • java ——存放项目的.java文件
      • resources ——存放项目资源文件,如spring, hibernate配置文件
    • test
      • java ——存放所有测试.java文件,如JUnit测试类
      • resources ——存放项目资源文件,如spring, hibernate配置文件
    • target ——项目输出位置
    • pom.xml —-用于标识该项目是一个Maven项目

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">
    <!--所有的Maven项目都必须配置这四个配置项-->
    <modelVersion>4.0.0</modelVersion>
    <!--groupId指的是项目名的项目组,默认就是包名-->
    <groupId>cn.zang.maven.hello</groupId>
    <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
    <artifactId>hello-first</artifactId>
    <!--version指的是版本,这里使用的是Maven的快照版本-->
    <version>SNAPSHOT-0.0.1</version>
</project>

2.使用mvn archetype:create命令创建maven项目

cmd中确定项目路径并输入:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=myapp
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
效果如图:
这里写图片描述

可以看到,Maven帮我们创建的项目是一个标准的Maven项目,不过目前Maven只是帮我们生成了src/main/java(存放项目的源代码)和src/test/java(存放测试源代码)这两个目录,但实际项目开发中我们一般都会有配置文件,例如log4j.properties,所以我们还需要手动创建src/main/resources(存放项目开发中用到的配置文件,如存放log4j.properties等)和src/test/resources(存放测试时用到的配置文件),如下图所示:
这里写图片描述
  
  然后我们就可以将创建好的myapp项目导入到Eclipse中进行开发了,如下图所示:这里写图片描述
  

3.pom.xml详解

( 1 ) pom意思就是project object model。
( 2 ) pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。
( 3) pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的pom.xml

  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.mycompany.app</groupId> 
     <artifactId>myapp</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <packaging>jar</packaging>

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

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

     <dependencies> 
      <dependency> 
         <groupId>junit</groupId>
         <artifactId>junit</artifactId> 
         <version>3.8.1</version> 
         <scope>test</scope> 
      </dependency> 
     </dependencies> 
 </project>

 pom.xml文件的节点元素说明:

节点节点说明
<project>pom文件的顶级节点
<modelVersion>object model版本,对Maven2和Maven3来说,只能是4.0.0
<groupId>项目创建组织的标识符,一般是域名的倒写
<version>当前项目的版本,SNAPSHOT,表示是快照版本,在开发中
<packaging>打包的方式,有jar、war、ear等
<name>项目的名称
<url>项目的地址
<properties>属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dependencies>构建项目依赖的jar

  其中由groupId、artifactIdversion唯一的确定了一个项目坐标

4.Maven编译-测试-打包-安装项目

mvn clean compile mvn clean test mvn clean package mvn clean install

5.Maven创建项目的命令说明

mvn archetype:generate -DgroupId=com.mycompany.app-DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

mvn archetype:generate 固定写法
DgroupId          组织标识(包名)
DartifactId          项目名称
DarchetypeArtifactId     指定ArchetypeId,maven-archetype-quickstart,创建一个JavaProject;maven-archetype-webapp,创建一个Web Project
DinteractiveMode      是否使用交互模式

  archetype是mvn内置的一个插件,create任务可以创建一个java项目骨架,DgroupId是软件包的名称,DartifactId是项目名,DarchetypeArtifactId是可用的mvn项目骨架,目前可以使用的骨架有:  
- maven-archetype-archetype
- maven-archetype-j2ee-simple
- maven-archetype-mojo
- maven-archetype-portlet
- maven-archetype-profiles (currently under development)
- maven-archetype-quickstart
- maven-archetype-simple (currently under development)
- maven-archetype-site
- maven-archetype-site-simple
- maven-archetype-webapp

每一个骨架都会建相应的目录结构和一些通用文件,最常用的是maven-archetype-quickstart和maven-archetype-webapp骨架。maven-archetype-quickstart骨架是用来创建一个Java Project,而maven-archetype-webapp骨架则是用来创建一个JavaWeb Project。

6. Maven坐标主要组成

  • groupId:组织标识(包名)
  • artifactId:项目名称
  • version:项目的当前版本
  • packaging:项目的打包方式,最为常见的jar和war两种
    样例:
    这里写图片描述
      
    Maven坐标是通过groupId、artifactId、version、packaging、classfier这些元素来定义的,我们来看看示例:
    这里写图片描述
    我们在平时的开发中一般只需要使用必要的几个元素就好了,不必要的一些元素往往是用不着的,我们来看看每个元素所代表的含义,前面也是有简单的提到过的。

groupId :定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。比如SpringFrameWork这一实际项目,其对应的Maven项目会有很多,如spring-core,spring-context等。这是由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义Maven项目(模块),那么实际项目这个层次将难以定义。最后,groupId的表示方式与Java包名的表达方式类似,通常与域名反向一一对应。上例中,groupId为junit,是不是感觉很特殊,这样也是可以的,因为全世界就这么个junit,它也没有很多分支。

artifactId : 该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。比如上例中的junit,junit就是实际的项目名称,方便而且直观。在默认情况下,maven生成的构件,会以artifactId作为文件头,如junit-3.8.1.jar,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。

version : 该元素定义了使用构件的版本,如上例中junit的版本是3.8.1,你也可以改为4.0表示使用4.0版本的junit。

packaging :定义Maven项目打包的方式,使用构件的什么包。首先,打包方式通常与所生成构件的文件扩展名对应,如上例中没有packaging,则默认为jar包,最终的文件名为junit-3.8.1.jar。也可以打包成war等。

classifier: 该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为junit-3.8.1.jar,该项目可能还会通过一些插件生成如junit-3.8.1-javadoc.jar,junit-3.8.1-sources.jar, 这样附属构件也就拥有了自己唯一的坐标。

上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classfier是不能直接定义的,需要结合插件使用。
Maven为什么使用坐标?

Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。
拥有了统一规范,就可以把查找工作交给机器。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值