`
Clayz
  • 浏览: 297605 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

Maven初学备注

阅读更多

项目生命周期:process-resources -> compile -> process-classes -> process-test-resources ->

                            test-compile -> test -> prepare-package -> package

也可单独运行:

mvn resources:resources \
         compiler:compile \
         resources:testResources \
         compiler:testCompile \
         surefire:test \
         jar:jar

 

Maven坐标:groupId:artifactId:packaging:version 

groupId
团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。来自Sonatype的项目有一个以com.sonatype开头的groupId,而Apache Software的项目有以org.apache开头的groupId。

artifactId
在groupId下的表示一个单独项目的唯一标识符。
version
一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个“SNAPSHOT”的标记。
packaging
项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。

 

help插件:

$ mvn help:describe -Dplugin=help -Dfull

创建简单项目:

$ mvn archetype:create -DgroupId=org.clayz.simple -DartifactId=simple -DpackageName=org.clayz.simple

 

构建并打包:

$ mvn install

生成站点和报告:

$ mvn site

 

在不载入依赖情况下运行Java类:

$ mvn exec:java -Dexec.mainClass=org.clayz.simple.weather.Main

 浏览项目依赖:

$ mvn dependency:resolve
$ mvn dependency:tree

 

指定编译环境:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
    </plugins>
</build>

 

忽略单元测试失败:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
    </plugins>
</build>

 跳过单元测试:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

 

构建打包好的命令行应用程序:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>
$ mvn assembly:assembly

 

创建一个web应用的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>org.clay.web</groupId>
    <artifactId>clay-webapp</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>

    <name>clay-webapp Maven Webapp</name>
    <url>http://clay.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.4_spec</artifactId>
            <version>1.1.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>clay-webapp</finalName>
    </build>
</project>

 为自定义JSP标签添加JSP 2.0规格说明:

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jsp_2.0_spec</artifactId>
    <version>1.1</version>
    <scope>provided</scope>
</dependency>

 

多模块中父模块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>
    <artifactId>simple-parent</artifactId>
    <packaging>pom</packaging>
    <name>Chapter 6 Simple Parent Project</name>

    <modules>
        <module>simple-weather</module>
        <module>simple-webapp</module>
    </modules>

    <parent>
        <artifactId>parent</artifactId>
        <groupId>org.sonatype.mavenbook.ch06</groupId>
        <version>1-SNAPSHOT</version>
    </parent>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.5</source>
                        <target>1.5</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

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

其中simple-webapp子模块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>

    <parent>
        <groupId>org.sonatype.mavenbook.ch06</groupId>
        <artifactId>simple-parent</artifactId>
        <version>1-SNAPSHOT</version>
    </parent>

    <artifactId>simple-webapp</artifactId>
    <packaging>war</packaging>
    <name>Chapter 6 Simple Web Application Project</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-servlet_2.4_spec</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.sonatype.mavenbook.ch06</groupId>
            <artifactId>simple-weather</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>simple-webapp</finalName>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 由Maven Reactor负责解析模块依赖以编译:

$mvn clean install

 

多模块的依赖优化:

上移共同的依赖至dependencyManagement
如果多于一个项目依赖于一个特定的依赖,你可以在dependencyManagement中列出这个依赖。父POM包含一个版本和一组排除配置,所有的子POM需要使用groupId和artifactId引用这个依赖。如果依赖已经在dependencyManagement中列出,子项目可以忽略版本和排除配置。
为兄弟项目使用内置的项目version和groupId
使用{project.version}和${project.groupId}来引用兄弟项目。兄弟项目基本上一直共享同样的groupId,也基本上一直共享同样的发布版本。使用${project.version}可以帮你避免前面提到的兄弟版本不一致问题。

 

如原始父pom:

<project>
    ...
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
                <version>2.0.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity</artifactId>
                <version>1.5</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-annotations</artifactId>
                <version>3.3.0.ga</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-commons-annotations</artifactId>
                <version>3.3.0.ga</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate</artifactId>
                <version>3.2.5.ga</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.transaction</groupId>
                        <artifactId>jta</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>
    ...
</project>

 原始子pom:

<project>
    ...
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate</artifactId>
        </dependency>
    </dependencies>
    ...
</project>

 可以看出父pom与子pom在hibernate-annotations和hibernate-commons-annotations上有重复,优化后的父pom如下:

<project>
    <properties>
        <hibernate.annotations.version>3.3.0.ga</hibernate.annotations.version>
    </properties>
    ...
    <dependencyManagement>
        ...
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>${hibernate.annotations.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>${hibernate.annotations.version}</version>
        </dependency>
        ...
    </dependencyManagement>
    ...
</project>
 
分享到:
评论

相关推荐

    maven初学者利器

    具体介绍了maven初学搭建项目一个流程,内容详细,并且介绍主流maven插件比如cargo,checkstyle,findbugs以及在tomcat上项目的运行

    Java_Maven初学者教程与示例.zip

    Java Maven初学者教程与示例是一个为初学者设计的资源包,旨在帮助他们快速掌握Maven这一强大的Java项目管理和构建工具。Maven是Apache软件基金会开发的一个项目管理工具,它通过一个项目对象模型(Project Object ...

    Maven初学笔记

    ### Maven初学笔记 #### Maven概述 **Apache Maven** 是一款功能强大的软件项目管理和综合工具。它基于项目对象模型(Project Object Model, POM)的概念,能够从一个中心信息源管理项目的构建、报告以及文档。这...

    maven 3.5.2 maven 3.5.2 maven 3.5.2

    ** Maven 概述** Maven 是一个强大的项目管理和构建工具,广泛应用于Java开发领域。它通过使用一个统一的构建过程,简化了项目的构建、依赖管理以及文档生成等任务。Maven 3.5.2是Maven的一个稳定版本,包含了众多...

    java班级管理源码-MavenIn28Minutes:Maven初学者教程和示例

    初学者教程 - 28 分钟内的示例 安装 Eclipse 和 Java 课程大纲 我们将使用 Handson Real World 示例来了解 Maven 可以做什么。 我们将了解 Maven 如何使应用程序开发人员的生活变得轻松。 我们将学习 Maven 如何帮助...

    maven安装maven安装maven安装maven安装maven安装

    maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...

    初学者配置maven及使用SSM框架创建maven项目

    这是一个压缩包。这是一个maven项目,使用Java语言开发的web工程,使用了SpringMVC+Spring+Mybatis,建议初学者入手。

    apache-maven-3.6.2_maven_

    对于初学者来说,Maven简化了项目结构,通常遵循标准的目录布局,如src/main/java存放源代码,src/main/resources存放资源文件,src/test/java存放测试代码。这种结构使得团队协作变得更加清晰和有序。 与IDE的集成...

    开源工具Maven3.9.4版本压缩包

    Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven3.9.4版本压缩包,仅供学习参考,更新版本请前往Maven官方下载;Maven...

    maven历史版本下载

    **正文** Maven是Java开发领域中不可或缺的项目管理和构建工具,由Apache Software Foundation开发并维护。...因此,无论是初学者还是经验丰富的开发者,都应该掌握Maven的使用技巧,以适应快速变化的软件开发环境。

    简单的ssm-maven项目,供初学者学习

    一个基础的maven项目,供给初学maven的同学检阅如何配置maven项目,采用jdk1.8,maven3.5.2,使用阿里云maven服务器导入jar包,内涵基础ssm的pom文件,包括跨域访问,供给大家学习交流使用。

    使用Maven导入Maven工程的视频教程

    使用Maven导入Maven工程的视频教程 仅供学习交流! 后续会持续分享相关资源,记得关注哦! 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入Maven工程的视频教程 使用Maven导入...

    Maven学习极品,对于初学者而言非常好的资料,极力推荐

    【 Maven学习极品:初学者的完美指南】 Maven,一个由Apache软件基金会开发的项目管理工具,是Java世界中不可或缺的一部分。它简化了构建过程,通过自动管理项目的依赖关系,使得开发者可以专注于编写代码,而不是...

    maven之开源中国Maven库

    【标题】"maven之开源中国Maven库" 指的是使用 Maven,一个流行的Java项目管理和集成工具,与开源中国的Maven仓库进行交互。开源中国Maven库是中国的一个开源软件资源平台,提供了大量的开源Java库,使得开发者可以...

    apache-maven-3.6.0_apache-maven-3.6.0_maven压缩包_maven3.6.0下载_

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和文档。Maven 3.6.0是该工具的一个稳定版本,提供了许多改进...

    Maven全版本资源,Maven 3.0.5-3.8.5,每个版本包含4个文件,Maven3全资源打包下载,Maven全集

    apache-maven-3.0.5 apache-maven-3.1.1 apache-maven-3.2.5 apache-maven-3.3.9 apache-maven-3.5.4 apache-maven-3.6.3 apache-maven-3.8.5 每个版本包含4个文件: apache-maven-3.8.5-bin.tar.gz apache-maven-...

    Mac的maven安装包apache-maven-3.6.3.zip

    在IT行业中,Maven是一个非常重要的工具,尤其对于Java开发者来说,它是项目管理和构建的首选。本篇将详细讲解如何在Mac系统上,特别是配备M1芯片的MacBook上安装Apache Maven 3.6.3。 Apache Maven是一个基于项目...

Global site tag (gtag.js) - Google Analytics