Hello World项目中有一些Maven的约定:在项目根文件夹中放置pom.xml,在src/main/java文件夹下放置项目的主代码,在sc/test/java中放置项目的測试代码。之所以一步一步的展示这些步骤,就是为了让我们这些菜鸟得到最真实的感受。
我们称这些主要的文件夹结构和pom.xml文件内容为项目的骨架。
例如以下就是我们项目的文件夹结构骨架:
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6LzA5YmY1MWEwLWM0MmQtNDE5Ny05ZWM3LWFhZTg5ZWM5ZGUyMi5wbmc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTFNelU1TmpNPS5qcGc%3D.jpg?w=700&webp=1)
可是我们不希望每次创建项目时。都是手动一个一个的创建我们的文件夹结构。反复这些没有什么意义的事情。
为此Maven提供了Archetype来帮助我们高速的勾勒出项目骨架。
我们还是以Hello World项目为例进行说明:
假设是Maven3。简单的执行:
mvn archetype:generate
假设是Maven2,最好执行例如以下命令:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
在Maven2中直接使用mvn archetype:generate命令是不安全的,由于该命令没有指定Archetype插件的版本号。于是Maven会自己主动下载最新的版本号,进而可能得到不稳定的SNAPSHOT版本号,导致执行失败。
然而在Maven3中。即使用户没有指定版本号,Maven也会仅仅解析最新的稳定版本号,因此是安全的。
首次执行时,mvn会从远程"*仓库"下载一些必需的文件到"本地仓库"(C:\Users\当前username\.m2\repository)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTJNVEV3TkRJPS5qcGc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6L2EyZTZlM2JiLTYzZDEtNDc0Mi1hNDYzLWE1MGViN2MxMjBiOC5wbmc%3D.jpg?w=700&webp=1)
下载完毕后,会自己主动进入交互模式。会让你输入一些基本信息,类似以下这样:
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTJNak01TmpRPS5qcGc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6L2FjN2UyODNiLTNkYzQtNDNmNC05MDZkLWNjOWFjZjAyODc2Yy5wbmc%3D.jpg?w=700&webp=1)
[INFO] Generating project in Interactive mode
由于要联网获取项目模板,在这要等待一段时间,莫要着急。
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTJORGs1T0RBPS5qcGc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6LzZiMjgzMzJlLTQ4OWQtNDFmZC1iYzczLWRkODgwNjBiOWQ1MS5wbmc%3D.jpg?w=700&webp=1)
这里会自己主动列出非常多项目模板,每种模板前面会有一个数字序号。直接回车。721,依据每一个人机器上安装的eclipse插件不同。可能默认的数字不同。
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6LzQ5NDg3YzI2LTlhNmQtNGRlYS05MjQ0LTdmYmVjNTVmMTIwZi5wbmc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTNNRGN5T1RFPS5qcGc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6LzY2ZmI3N2RmLTBiNjktNDY4Zi05NzAwLWUyNGUxOGFhNDU5My5wbmc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTNNakUwTkRjPS5qcGc%3D.jpg?w=700&webp=1)
Archetype插件将依据我们提供的信息创建项目骨架。
在当前文件夹下,Archetype插件会创建一个名为mavendemo-hello-world(我们定义的artifactId)的子文件夹,从中能够看到项目的基本结构:主要的pom.xml已经被创建,里面包括了必要的信息以及一个junit依赖;主代码文件夹src/main/java已经被创建。在该文件夹下另一个Java类,注意这里使用到了刚才定义的包名。而这个类也只唯独一个简单的输出Hello World!的main方法;測试代码文件夹src/test/java也被创建好了。而且包括了一个測试用例。
package com.sjf.model;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
package com.sjf.model;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest
extends TestCase
{
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Rigourous Test :-)
*/
public void testApp()
{
assertTrue( true );
}
}
项目结构:
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuc2h1emhpZHVvLmNvbS9Vc2Vycy9BRE1JTkl+MS9BcHBEYXRhL0xvY2FsL1RlbXAvV2l6LzQ1NTY0ZDE5LWYwOGMtNDRlMC05ZDkzLWM4NzMyMWY4MzYyNy5wbmc%3D.jpg?w=700&webp=1)
Archetype生成项目骨架 [Maven实战](5)Archetype生成项目骨架](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMW5MbUpzYjJjdVkzTmtiaTV1WlhRdk1qQXhOakF4TWpVeU1USTNNekl3TkRRPS5qcGc%3D.jpg?w=700&webp=1)
Archetype:generate另一种方式,一次性设置所有属性:
mvn archetype:generate -DgroupId=com.sjf.mavendemo -DartifactId=mavendemo-hello-world -Dversion=1.0.0SANPSHOT -Dpackage=com.sjf.model
来源于:《maven实战》