`

Maven使用介绍,自己整理的

 
阅读更多

一. Maven的目录结构:

 

bin
boot
conf
lib
LICENSE.txt
NOTICE.txt
README.txt

     Bin: 该目录包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。其中mvn是基于UNIX平台的shell脚本,mvn.bat是基于Windows平台的bat脚本。在命令行输入任何一条mvn命令时,实际上就是在调用这些脚本。该目录还包含了mvnDebug和mvnDebug.bat两个文件,同样,前者是UNIX平台的shell脚本,后者是windows的bat脚本。那么mvn和mvnDebug有什么区别和关系呢?打开文件我们就可以看到,两者基本是一样的,只是mvnDebug多了一条MAVEN_DEBUG_OPTS配置,作用就是在运行Maven时开启debug,以便调试Maven本身。此外,该目录还包含m2.conf文件,这是classworlds的配置文件,稍微会介绍classworlds。
    Boot: 该目录只包含一个文件,以maven 3.0为例,该文件为plexus-classworlds-2.2.3.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。更多关于classworlds的信息请参考http://classworlds.codehaus.org/。对于一般的Maven用户来说,不必关心该文件。
    Conf: 该目录包含了一个非常重要的文件settings.xml。直接修改该文件,就能在机器上全局地定制Maven的行为。一般情况下,我们更偏向于复制该文件至~/.m2/目录下(这里~表示用户目录),然后修改该文件,在用户范围定制Maven的行为。本书的后面将会多次提到该settings.xml,并逐步分析其中的各个元素。
    Lib: 该目录包含了所有Maven运行时需要的Java类库,Maven本身是分模块开发的,因此用户能看到诸如mavn-core-3.0.jar、maven-model-3.0.jar之类的文件,此外这里还包含一些Maven用到的第三方依赖如common-cli-1.2.jar、google-collection-1.0.jar等等。(对于Maven 2来说,该目录只包含一个如maven-2.2.1-uber.jar的文件原本各为独立JAR文件的Maven模块和第三方类库都被拆解后重新合并到了这个JAR文件中)。可以说,这个lib目录就是真正的Maven。关于该文件,还有一点值得一提的是,用户可以在这个目录中找到Maven内置的超级POM,这一点在8.5小节详细解释。其他: LICENSE.txt记录了Maven使用的软件许可证Apache License Version 2.0; NOTICE.txt记录了Maven包含的第三方软件;而README.txt则包含了Maven的简要介绍,包括安装需求及如何安装的简要指令等等。

 

二. 设置

 1. 设置MAVEN_OPTS环境变量。我们通常需要设置MAVEN_OPTS的值为:-Xms128m -Xmx512m,因为Java默认的最大可用内存往往不能够满足Maven运行的需要,比如在项目较大时,使用Maven生成项目站点需要占用大量的内存,如果没有该配置,我们很容易得到java.lang.OutOfMemeoryError。因此,一开始就配置该变量是推荐的做法。

 2. 配置用户范围settings.xml。我们推荐使用用户范围的settings.xml,主要原因是为了避免无意识地影响到系统中的其他用户。当然,如果你有切实的需求,需要统一系统中所有用户的settings.xml配置,当然应该使用全局范围的settings.xml。除了影响范围这一因素,配置用户范围settings.xml文件还便于Maven升级。直接修改conf目录下的settings.xml会导致Maven升级不便,每次升级到新版本的Maven,都需要复制settings.xml文件,如果使用~/.m2目录下的settings.xml,就不会影响到Maven安装文件,升级时就不需要触动settings.xml文件。

 3. 在IDE中配置Maven插件时使用与命令行一致的Maven。在m2eclipse环境中,点击菜单栏中的Windows,然后选择Preferences,在弹出的对话框中,展开左边的Maven项,选择Installation子项,在右边的面板中,我们能够看到有一个默认的Embedded Maven安装被选中了,点击Add…然后选择我们的Maven安装目录M2_HOME,添加完毕之后选择这一个外部的Maven。

三:pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- project元素是根元素 -->
<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">

        <!-- 指定了当前POM模型的版本,对maven2和3来说只能4.0.0 -->
        <modelVersion>4.0.0</modelVersion>

        <!-- 下面3个元素定义了一个项目基本的坐标 -->
        <groupId>com.wb.mvntest</groupId>       <!-- groupId定义了项目属于哪个组 -->
        <artifactId>hello-world</artifactId>    <!-- artifactId定义了当前Maven项目在组中唯一的ID,一般是模块名 -->
        <version>1.0-SNAPSHOT</version>         <!-- version指定了项目当前的版本 -->
        <packaging>jar</packaging>        <!-- 打包方式,默认jar -->        
        <name>Maven Hello World Project</name>  <!-- 声明一个对于用户更为友好的项目名称,不是必须的 -->
        
         
        <!-- 可以包含多个dependency元素以声明项目的依赖 -->
        <dependencies>
                <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.7</version>
                        <scope>test</scope>     <!-- 定义依赖范围,test表示只对测试有效,默认值是compile,表示对主代码和测试代码都有效 -->
                </dependency>
        </dependencies>

        <!-- 没有任何实际的java代码,我们就能够定义一个Maven项目的POM,能让项目对象模型最大程度地与实际代码相独立,做到了解耦 -->

</project>

 四:main代码

       项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包。默认情况下,Maven假设项目主代码位于src/main/java目录,我们遵循Maven的约定,创建该目录,然后在该目录下创建文件com/wb/mvntest/helloworld/HelloWorld.java

package com.wb.mvntest.helloworld;  
   
public class HelloWorld  {  
   public String sayHello()  {  
     return "Hello Maven";  
   }  
  
  public static void main(String[] args)  {  
     System.out.print( new HelloWorld().sayHello() );  
   }  
}

 代码编写完毕后,使用Maven进行编译,在项目跟目录下运行命令mvn clean compile。clean告诉Maven清理输出目录target/,compile告诉Maven编译项目主代码。

 

五:test代码

       Maven项目中默认的测试代码目录是src/test/java,我们创建该目录,然后在该目录下创建文件com/wb/mvntest/helloworld/HelloWorldTest.java

package com.wb.mvntest.helloworld;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class HelloWorldTest {
        @Test
        public void testSayHello() {
                HelloWorld helloWorld = new HelloWorld();
                String result = helloWorld.sayHello();
                assertEquals("Hello Maven", result);
        }
}

 代码编写完毕后,使用Maven执行测试,在项目跟目录下运行命令mvn clean test。clean告诉Maven清理输出目录target/,test告诉Maven执行测试。

 

六:打包和运行

       将项目进行编译、测试之后,下一个重要步骤就是打包(package)。Hello World的POM中没有指定打包类型,使用默认打包类型jar,我们可以简单地执行命令 mvn clean package 进行打包。打包实际上就是jar插件的jar目标将项目主代码打包成一个名为hello-world-1.0-SNAPSHOT.jar的文件,该文件也位于target/输出目录中,它是根据artifact-version.jar规则进行命名的,如有需要,我们还可以使用finalName来自定义该文件的名称。

        至此,我们得到了项目的输出,如果有需要的话,就可以复制这个jar文件到其他项目的Classpath中从而使用HelloWorld类。但是,如何才能让其他的Maven项目直接引用这个jar呢?我们还需要一个安装的步骤,执行 mvn clean install。安装任务install:install将项目输出的jar安装到了Maven本地仓库中,其他Maven项目就可以使用它了。

        至此,已经介绍了Maven最主要的命令:mvn clean compile、mvn clean test、mvn clean package、mvn clean install。执行test之前是会先执行compile的,执行package之前是会先执行test的,而类似地,install之前会执行package。

 

七:使用Archetype生成项目骨架

       mvn archetype:generate

 

分享到:
评论

相关推荐

    maven常用知识整理

    以下是对"Maven常用知识整理"的详细阐述: 1. **项目依赖管理**:Maven通过pom.xml文件来管理项目的依赖关系,使得开发者可以声明项目需要的库,Maven会自动下载并管理这些库。依赖的版本冲突问题,Maven会按照一定...

    maven学习资源整理

    ** Maven学习资源整理** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。本资源包是为初学者和有经验的开发者准备的一系列Maven学习资料,旨在帮助你更好地理解和...

    maven相关整理maven相关整理

    Maven通过使用一个项目对象模型(Project Object Model,POM),来描述项目的配置信息,包括项目的依赖、构建过程、插件等,极大地简化了项目的构建和维护。 **1. Maven的核心概念** - **项目对象模型(POM)**:...

    eclipse使用maven整理文档.rar_captured7ne_eclipse mavenhelper_maven

    【标题】"eclipse使用maven整理文档"涵盖了在Eclipse集成开发环境中使用Maven进行项目管理和文档生成的实践知识。Maven是一个强大的Java项目管理工具,它通过配置文件(pom.xml)来管理项目的构建、依赖关系和文档...

    自己整理的maven

    ### Maven核心知识点详解 #### 一、Maven配置与运行 ...通过上述内容的详细介绍,我们可以看出Maven是一款功能强大且高度灵活的项目构建工具,它极大地简化了基于Java项目的构建和管理过程,提高了开发者的生产力。

    maven常用jar包整理pom.xml

    自用maven的jar包整理,没有冲突,可以直接粘贴复制,直接使用

    Maven常用插件整理.docx

    本文将详细介绍Maven中的常用插件及其功能。 1. Maven Assembly Plugin Maven Assembly 插件允许开发者将项目的输出,包括依赖、模块、网站文档和其他文档集成到一个单一的文档中,以便于定制打包。这个插件支持...

    maven3学习资料整理

    以下是对 Maven3 学习资料的详细整理: **一、Maven 安装与配置** 1. **安装**:首先,你需要从官方网站下载 Maven 的最新版本,然后解压到指定的目录。 2. **环境变量配置**:设置 `JAVA_HOME` 和 `MAVEN_HOME` ...

    Maven心得,简单介绍maven。

    不仅如此,Maven 还是一个项目信息管理工具,它可以收集并整理项目描述、开发者信息、版本控制、许可证等,生成项目站点,提供文档、测试报告、静态代码分析等信息,方便团队协作和项目维护。此外,通过 Nexus 等...

    maven学习笔记整理

    maven学习笔记整理

    IntelliJ Idea下Maven插件使用技巧.pdf

    IntelliJ Idea下Maven插件使用技巧 标签:Idea Maven IntelliJ Idea下Maven插件使用技巧,对于开发人员快速上手,并可能有效提高开发效率,特将此整理分享给大家。

    maven更新用到的jar包整理

    见截图,列举部分jar: 3.5.7.Final.jar aspectjweaver.jar cglib-nodep-2.1_3.jar commons-codec-1.8.jar commons-collections-3.2.1.jar guava-15.0.jar httpClient4.3.1.rar ...maven-bundle-plugin-1.0.0.jar

    Maven使用手册(多年实践经验整理)

    在自己多年实践的基础之上,对Maven的一些常用功能进行了整理,分享给大家

    超详细Maven快速入门到精通.txt打包整理.zip

    标题"超详细Maven快速入门到精通.txt打包整理.zip"表明这是一个关于Maven的全面教程,涵盖了从基础到高级的各个方面,旨在帮助用户快速掌握Maven的使用。Maven是一个Java项目管理和综合工具,由Apache软件基金会开发...

    MAVEN基础篇-资料整理

    ### MAVEN基础篇-资料整理 #### 第一章 Maven 简介 ##### 1.1 软件开发中的阶段 在软件开发过程中,一个典型的项目生命周期包括多个阶段:初始化、配置管理、源代码管理、编译、测试、打包、验证、部署等。每个...

    maven基础入门教程

    ### Maven基础入门教程知识点整理 #### Maven概述 1. **Maven定义与历史** Maven是一个开源项目管理工具,由Apache软件基金会管理。它用纯Java编写,旨在简化Java项目的构建过程以及管理项目生命周期。Maven通过...

    Birt3.7 maven 配置文件

    Birt3.7 的maven配置文件,整理了很长时间的 值得使用maven管理项目并加入birt进行报表管理的开发,jar包请自己下载

    maven-dependencies.rar

    本资源包"maven-dependencies.rar"正是为了简化这一过程而精心整理的,包含了常用的Maven依赖,确保开发者在下载后无需再手动查找,极大地提高了开发效率。 首先,我们来深入理解Maven的依赖管理机制。Maven采用一...

    maven讲解实战

    通过阅读《Maven实战-Linux公社www.Linuxidc.com整理.pdf》这份文档,可以深入理解Maven在实际项目中的应用和最佳实践。 总的来说,Maven是Java开发中的一把利器,它通过标准化的构建流程和强大的依赖管理功能,...

    自己整理的SSM+maven环境整合

    SSM框架整合是Java开发中常见的一种技术组合,主要包括Spring、Spring MVC和MyBatis三个核心组件,再结合Maven进行项目构建和依赖管理。以下是对这个主题的详细阐述: **Spring框架** 是一个全面的企业级应用开发...

Global site tag (gtag.js) - Google Analytics