Maven实战读书笔记(4)

什么是Maven项目的骨架?

我们遵循Maven项目的以下约定:

1、在根目录放置pom.xml

2、在src/main/java目录放置项目的主代码

3、在src/test/java中放置项目测试代码

我们称这些基本目录结构和pom.xml文件内容称为项目的骨架

 

如何使用maven archetype创建项目的骨架?

如果是Maven 3mvn archetype:generate

如果是Maven 2mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate

:在资料会让你直接使用更为简单的mvn archetype:generate命令,但在Maven 2中这是不安全的,因为该命令没有指定Archetype插件的版本,于是Maven会自动去下载最新的版本,进而可能得到不稳定的SNAPSHOT版本,导致运行失败。然而在Maven3中,即使用户没有指定版本,Maven也只会解析最新的稳定版本,因此这是安全的

 

简单解释mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate命令

执行这条命令其实是在运行插件maven-archetype-plugin,注意冒号间隔

其格式是groupId:artifactId:version:goal

org.apache.maven.pluginsmaven官方插件的groupId

maven-archetype-pluginArchetype插件的artifactId

2.0-alpha-5是目前该插件最新的稳点版本

generate是要使用的插件目标

 

作为一个用户,注册账户的时候往往需要做以下事情:

1、一个未被使用过的账号ID

2、一个未被使用的email地址

3、一个任意的显示名称

4、设置安全密码,并重复输入以确认

5、输入验证码

6、前往邮箱查收激活连接并单击激活账号

8、登录

 

为什么需要上面那些操作?

1、使用账户IDEmail用来唯一地标识某个账户

2、使用名称显示在页面上,方便浏览

3、输入两次密码,以确保没有输错

系统需要检查IDEmail的唯一性,验证两次输入的密码是否一致

4、验证码是由系统随机生成的只能由肉眼识别器内容的图片,可以有效防止机器恶意批量注册,若输入正确的验证码信息,系统则会进行检查,如果验证码错误,系统会生成并返回新的验证码

5、一旦所有检查都没有问题,系统就会生成一个激活链接,并发送到用户的邮箱中,单击激活链接后,账户就被激活了,注册就完成了,用户就可以登录了

 

如果考虑到一些安全的因素?

比如说,服务器端密文地保存密码,检查密码的强弱程度,更进一步则需要考虑验证码的失效时间,激活链接的失效时间,等等

 

Maven的坐标(Coordinate)

Maven定义了这样一组规则,世界上任何一个构件都可以使用Maven坐标唯一标识

Maven的坐标的元素包括groupIdartifactIdversionpackagingclassifier

比如,需要使用Java5平台上的TestNG5.8版本,就告诉Maven : "groupId=org.testing; artifactId=testing; version=5.8; classifier=jdk15"

Maven内置了一个中央仓库的地址(http://repol.maven.org/maven2),该中央长湖包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载

 

关于Maven坐标命名的一些建议

1、一个公司往往会有很多项目,groupId不应该对应项目隶属的组织或公司,即groupId不要只定义在组织级别 比如 org.apache 不要这样,要这样org.apache.hadoop,定义到实际项目名

2arifactId为实际相中的一个Maven模块,命名规则一般为:使用实际项目名前缀,便于查找

3version版本,以后再说
4packaging元素定义Maven项目的打包方式,jarwar等,打包方式会影响构建的声明周期不指定packing时,默认是jar

5classifier元素用来定义构建输出的一些附属构件,附属构件与主构件对应,

 

什么是附属构件与主构件?

比如nexus-indexer-2.0.0.jar是主构件,该项目可能还会通过使用一些插件生成如nexus-indexer-2.0.0-javadoc.jarnexus-indexer-2.0.0-sources.jar这样一些附属构件,其包含了Java文档和源码。这时候javadocsources就是这两个附属构件的classifier。这样附属构建也就拥有了自己唯一的坐标。

注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的

 

groupIdartifactIdversionpackagingclassifier如何定义

groupIdartifactIdversion是必须定义的

packaging是可选的(默认为jar)

classifier是不能直接定义的

 

packing的定义一定与构件扩展名对应吗?

不一定,比如packagingmaven-plugin的构件扩展名为jar

 

Maven仓库的布局是什么意思?

Maven仓库的布局也是基于Maven的坐标,后面会说

 

案例account-email

案例中有一个email模块负责发送账户激活的电子邮件

包括:POM配置、主代码和测试代码以及Spring配置

 

GreenMail是什么?

GreenMail是开源的邮件服务测试套件,account-email模块使用该套件来测试邮件的发送

关于GreenMail的详细信息可访问http://www.icegreen.com/greenmail/

 

一个依赖声明可以包含如下元素

<project>

...

       <dependencies>

              <dependency>

                     <groupId>...</groupId>

                     <artifactId>...</artifactId>

                     <version>...</version>

                     <type>...</type>

                     <scope>...</scope>

                     <optional>...</optional>

                     <exclusions>

                            <exclustion>

                            ...

                            </exclustion>

                     ...

                     </exclusions>

              </dependency>

       ...

       </dependencies>

...

</project>


project元素?

包含一个dependencies

 

dependencies元素?

包含多个dependency元素,以声明一个或多个项目的依赖

 

每个dependency元素,可以包含的元素有?

1groupIdartifactIdversion,依赖的基本坐标,Maven根据坐标才能找到需要的依赖

2type,依赖的类型,对应于项目坐标定义的packaging,大部分情况下,该元素不必声明,默认为jar

3scope,依赖的范围

4optional,标记依赖是否可选

5exclusions:用来排除传递性依赖


你可能感兴趣的:(Maven实战读书笔记(4))