Maven - notes 2

一般这种软件都是可以用命令行用的,当然一些现代化的IDE,可以集成一些操作。在本文中,我先对命令行的使用方法做一些了解,然后捣鼓如何在Intellij中使用它。

最不会错不会过时的入门方法,还是去看官网的入门指南(以及民间译文)。本文会在相对忠于官方指南的基础上,补充一些个人觉得不大容易懂的内容。

[TOC]

我觉得常见的项目目录挺重要的,所以再看一下:

1
2
3
4
5
6
7
8
9
┬ /.settings
├ /src
│ ├ /main
│ └ /test
├ /target
│ └ /class
├ .classpath
├ .project
└ pom.xml

部分术语

Artifact 相关的重要常识

In general software terms, an “artifact“ is something produced by the software development process, whether it be software related documentation or an executable file.

An artifact is a file, usually a JAR, that gets deployed to a Maven repository.

from stackoverflow.com What is a Maven artifact?

artifact一般是指软件开发过程中产生的某种文档或可执行文件。
在Maven项目中,artifact(有人译作依赖包)一般指某些JAR文件,可以被部署到Maven仓库,运行某个项目/模块。

以下提供一些通俗的理解:

artifact是maven中的一个概念,表示某个module的打包。

这又多个module的概念,不懂的就先当他是个web项目,例如war exploded、war、jar、ear等等这种打包的文件,当module有对应的artifacts,即可部署到应用服务器中。

其中war exploded可以理解为展开,不压缩的意思。也就是war、jar等产出物没压缩前的目录结构。建议在开发的时候使用这种artifacts部署,便于修改文件快速生效。

artifact什么意思

Archetypes

In short, Archetype is a Maven project templating toolkit.

简单地说,Archetype 是Maven项目的一个模板工件。

可以在Introduction to Archetypes页面找到构建各种项目的模板生成指令。可以节省自己建立文件结构的麻烦。(当然借助IDE插件另当别论)

使用Win10命令行

在这里,我想说,网上有很多博客已经过时了。

maven在3.0.5版本之后废弃了create命令,如果要使用maven命令来创建maven项目需要用generate替换create来创建一个maven项目。

本文是在笔者使用Apache Maven 3.6.2版本的时候写的。

打个模板

选择一个喜欢的目录,启动命令行输入以下指令就会开始下载一些模板组件,

1
mvn archetype:generate

这里的模板也就是指Archetypes,可以在Introduction to Archetypes页面阅读其他选择的说明,这里只是练习一个例程。

下载完毕会让你填写项目的信息,也会作为本项目打包以后的包信息。

属性 介绍
groupId (Maven)项目的唯一标识。Group ID必须满足 Java包名规范 ,这意味着是形如:org.apache.mavenorg.apache.commons的格式。Maven不强制此规范,很多遗留的旧项目使用单个单词作为group ID。但是,很难用单个单词作为(新项目的)group ID,并将其提交到Maven中央仓库中。
artifactId 不带版本号的jar的名字。唯一要求是使用小写字母,且没有特殊符号。如果这是一个第三方的jar包,必须使用其被发布的包名,例如:mavencommons-math
version 如果要发布,可选择典型的数字和点号组成的版本号(1.01.11.0.1…)不要使用日期,因为它们通常和SNAPSHOT版本号联系在一起。如果是一个第三方的artifact,你必须使用它提供的版本号,无论这些版本号看起来多么奇怪,比如:2.02.0.11.3.1

笔者的记录:

1
2
3
4
5
6
7
8
9
10
Define value for property 'groupId': www.xxx.zzz
Define value for property 'artifactId': xxx
Define value for property 'version' 1.0-SNAPSHOT: : 0.1
Define value for property 'package' www.xxx.zzz: :
Confirm properties configuration:
groupId: www.xxx.zzz
artifactId: xxx
version: 0.1
package: www.xxx.zzz
Y: : Y

好吧这样写是不好的示例。

笔者第二次认真写的记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
Choose archetype:
...
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7:
Define value for property 'groupId': com.mycompany.app
Define value for property 'artifactId': my-app
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.mycompany.app: :
Confirm properties configuration:
groupId: com.mycompany.app
artifactId: my-app
version: 1.0-SNAPSHOT
package: com.mycompany.app
Y: :

中间空的冒号都是直接按回车,使用默认的。

这一步做完之后就会在本目录找到刚刚拉到的模板项目。

阅读pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<project xmlns="..." xmlns:xsi="..."
xsi:schemaLocation="...">
<modelVersion>4.0.0</modelVersion>

<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>my-app</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>
节点 介绍
project 这是Maven pom.xml文件中最顶级的节点。
modelVersion 这个节点指示 POM的对象模型试验什么版本。模型的版本改变非常少但是这是强制性的为了确定使用的稳定性和当Maven开发者认为至为重要的是改变这个模型。
groupld 这个节点指示是创建项目的组织或组的唯一标识符。这个groupId是项目键标识符的其中一个和通常基于完整有资格的组织的领域名字。例子:org.apache.maven.plugins 是设计的一个组对于所有Maven插件。
artifactId 这个节点指示是私有工件本被项目生成的唯一基本名字。这个项目的私有工件通常是一个JAR文件。第二,工件像源码捆也用于这个工件作为他们最终的名字。一个通常的由Maven生成的工件会有表单-.(例如 myapp-1.0.jar)。
packaging 这个节点是用于这个artifact打包类型(例如 JAR,WAR,EAR 等等)。这不仅意味着工件生成的是JAR,WAR,EAR但是指示是一个指定生命周期使用,作为构建进程的一部分。(这个周期是一个话题我们将处理并进一步研究在这个指南里。对于现在,只要记住项目的packaging指示可以作为一部分在自定义构建周期中。)packaging的默认值是JAR 所以你不需为大部分项目指定。
version 这个节点指示着这个工件被创建的版本。Maven有很长的一段路来帮助你管理版本和你经常看的SNAPSHOT指示器在这个版本中,它表示这这个项目是正在开发的状态。我们将讨论快照的使用和他们怎么进一步使用在指南中。
name 这个节点指示这项目显示名字,这是经常使用Maven的生成文件。
url 此元素指示项目的网站可在何处找到。这是经常使用Maven的生成文件。
description 此元素为您的项目提供基本说明。这是经常使用Maven的生成文件。

tips: jar、war、ear都是什么?

jar、war、ear、在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压缩格式。但是它们的使用目的有所区别:

  • Jar文件(扩展名为. Jar,Java Application Archive)包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)等
  • War文件(扩展名为.War,Web Application Archive)包含全部Web应用程序。在这种情形下,一个Web应用程序被定义为单独的一组文件、类和资源,用户可以对jar文件进行封装,并把它作为小型服务程序(servlet)来访问。
  • Ear文件(扩展名为.Ear,Enterprise Application Archive)包含全部企业应用程序。在这种情形下,一个企业应用程序被定义为多个jar文件、资源、类和Web应用程序的集合。

当你的项目已经完成了,那么就打个war包吧,这个时候一个war文件就相当于一个web应用程序;而jar文件就是把类和一些相关的资源封装到一个包中,便于程序中引用。

from blog.csdn.net JAR、WAR、EAR的使用和区别

参考

【长】《Maven官方指南》30分钟入门 | 并发编程网 – ifeve.com

【中】Maven是什么?

【中】Maven artifact版本管理规范,同级引用以及打包

【短/译】Maven项目groupId、artifactId和version命名规范

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×