IDEA创建Maven工程
1、配置Maven环境,配置IDEA
请参考:基于IDEA的JavaWeb开发环境搭建-Maven章节
2、创建Maven工程
先介绍一下几个常用参数:
groupId: 项目组织唯一的标识符,定义了项目属于这个组。
如:com.wangxiaoan1234
artifactId: 项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
如webapp
,生成的项目根目录文件夹名称就是webapp。
version: 版本。
如:1.0-SNAPSHOT
。
package: 对应JAVA的包结构,是main目录里java的目录结构。
如:com.wangxiaoan1234
,生成java目录结构就是java/com/wangxiaoan1234
2.1 使用IDE创建
2.1.1使用原型(maven-archetype-webapp)创建
2.1.1.1创建工程
填写:groupId、artifactId、version后下一步。
如果使用Maven默认的setting.xml文件和repository,这里直接下一步。
我这里没有使用系统默认,所以需要配置一下:从下拉列表里选择已经配置好的Maven home directory,
如果不知道怎么配置请查看:基于IDEA的JavaWeb开发环境搭建-Maven章节
采用默认Maven home directory或者选择自定义配置后会进入一下页面,默认前面填写的artifactId就是项目名称,这里默认即可,直接下一步。
创建成功后控制台会输出如下信息:
"C:\Program Files\Java\jdk1.8.0_101\bin\java" -Dmaven.multiModuleProjectDirectory=C:\Users\DELL\AppData\Local\Temp\archetypetmp -Dmaven.home=D:\tools\maven-3.3.9 -Dclassworlds.conf=D:\tools\maven-3.3.9\bin\m2.conf -Dfile.encoding=UTF-8 -classpath D:\tools\maven-3.3.9\boot\plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version=2017.1 -DinteractiveMode=false -DgroupId=com.wangiaoan1234 -DartifactId=archetype -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=RELEASE org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-webapp:1.0] found in catalog internal
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/maven-metadata.xml
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/maven-metadata.xml (498 B at 0.3 KB/sec)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: C:\Users\DELL\AppData\Local\Temp\archetypetmp
[INFO] Parameter: package, Value: com.wangiaoan1234
[INFO] Parameter: groupId, Value: com.wangiaoan1234
[INFO] Parameter: artifactId, Value: archetype
[INFO] Parameter: packageName, Value: com.wangiaoan1234
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\Users\DELL\AppData\Local\Temp\archetypetmp\archetype
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 28.697 s
[INFO] Finished at: 2017-08-20T16:38:37+08:00
[INFO] Final Memory: 14M/119M
[INFO] ------------------------------------------------------------------------
[INFO] Maven execution finished
创建成功后右下角弹窗是否自动导入依赖,点击Enable-Auto-Import
,这样修改pom文件的时候会自动导入依赖。
在项目任意位置Ctrl
+ Shift
+ A
,在这个窗口里可以对IDEA发号施令。输入maven
,点击Maven Project
,右边会弹出一个面板,里面包含Maven生命周期、插件、依赖信息。还有一些操作,比如Reimport All Maven Projects
。
下图是生成的目录结构:
2.1.1.2 为项目配置Tomcat
请参考:基于IDEA的JavaWeb开发环境搭建-Tomcat章节
2.1.1.3 启动测试
但是这里目录结构不全,没有包含java代码的文件夹,也没有测试类文件夹。
手动创建以下文件夹:
mark一下刚刚创建的文件夹:
有点乱,那么请看下面的GIF:
2.1.2不用原型(maven-archetype-webapp)创建
2.1.2.1创建工程
填写:groupId、artifactId、version后下一步。
像上面提到的,默认使用artifactId的值作为项目名称,这里保持默认即可。
创建成功后右下角弹窗是否自动导入依赖,点击Enable-Auto-Import
,这样修改pom文件的时候会自动导入依赖。
在项目任意位置Ctrl
+ Shift
+ A
,在这个窗口里可以对IDEA发号施令。输入maven
,点击Maven Project
,右边会弹出一个面板,里面包含Maven生命周期、插件、依赖信息。还有一些操作,比如Reimport All Maven Projects
。
创建完成的项目目录结构还不是标准的Maven web目录结构,在src/main目录下创建webapp目录作为Web资源目录。创建好后在webapp目录下创建WEB-INF文件夹,作为Web描述文件目录。创建好的目录结构如下:
注意这里的webapp目录的样式,指定它为Web资源目录后样式会有些不同。
手动添加的webapp文件夹并不是需和项目名称一样,Web资源目录规范叫webapp,我创建的项目名称叫webapp是巧合。
2.1.2.2 添加Factes组件
接下来进行设置,指定这两个文件夹作为Web资源目录和文件描述目录。
因为该工程不是从Maven原型创建的,这里啥都没有。
Factes:描述了Modules里使用的框架和技术。
接下来添加Web Factes,它就是一个Web项目了。
提示将该Facte作用于哪个Module,选择刚刚创建的webapp。
配置Web描述文件目录,web.xml将生成在这个目录下。
选择WEB-INF目录后(对应上图点击⑤后)别忘了再追加一个层级\web.xml
,否则不会自动创建web.xml文件。
配置Web资源目录。
配置好Web描述文件和Web资源目录后会自动在WEB-INF目录下生成web.xml文件,并且webapp目录样式会改变样式(变成什么样和主题有关)。
到这里Web Facets已经添加完毕,除了像上面那样先添加组件,然后指定作用于那个Module,还有下面的这种添加方式:在Modules里指定那个模块添加不同的组件,就不需要多一步“Choose Modules”。就像下图这样,接下来配置Web目录是一样的。
IDEA都有哪些Facets可用请参考官方文档:Available Facets and Their Dependencies
2.1.2.3 添加artifact
添加完一个Web Factes后一个大大的感叹号提示缺少artifact。它用来描述项目的发布信息。
可以点击下图的A或B位置进入添加artifact页面。
点击图标B位置按如下设置:
而点击图标A位置全自动创建好一切,会直接进入下图页面:(还是这种方式方便)
2.1.2.2 为项目配置Tomcat
请参考:基于IDEA的JavaWeb开发环境搭建-Tomcat章节
2.1.2.3 添加一个index.jsp启动测试
在webapp目录下添加一个index.jsp文件,
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
启动Tomcat输入访问路径:http://localhost:8080/webapp/
,出现了被玩了一万遍的Hello World!
写在后面:不知道大家有没有注意,为什么webapp就是根目录,这里面放的index.jsp输入http://localhost:8080/webapp/
就能访问。其实在添加Web Facets的时候需要配置Web资源目录,那个时候已经配置好了webapp的路径(系统默认是/)。
现做如下修改:偷偷的把项目改成这样,会不会被经理打死!!!
改都改了,顺便把项目发布路径也改了吧:
2.2 使用命令行创建
Maven教程推荐:w3cschool
Maven 使用原型(archetype)插件创建工程。建立一个简单的 Java web 应用,我们可以使用 maven-archetype-webapp
插件。
- 按
Window
+R
打开,输入cmd
打开cmd命令窗口。 - 输入
mvn -v
后按回车。出现maven版本信息说明maven环境配置正确。 - 切换到想要生成Maven工程的目录。(提示:有的文件夹名称比较长,当输入几个字母按
Tab
键系统会自动补全。)
2.2.1 使用maven-archetype-webapp原型
2.2.1.1 创建项目
1、输入mvn archetype:generate
,这一步等待时间会比较长。
2、Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1027:
这里的1027对应的是maven-archetype-quickstart,如果直接按Enter
会默认使用该模型。但是本次想要创建webapp,将控制台复制到文本编辑器搜索maven-archetype-webapp
,对应的数字是1030,所以这里输入1030后回车。如下图:
3、Choose a number: 5:
这里选择原型的版本,使用默认的即可(直接回车)。
4、Define value for property ‘groupId’: com.wangxiaoan1234
groupId是项目组织唯一的标识符。
5、Define value for property ‘artifactId’: webapp
就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
我填的是webapp,生成的项目根目录文件夹名称就是webapp。
6、Define value for property ‘version’ 1.0-SNAPSHOT: :
选择版本,默认(直接回车)。
7、Define value for property ‘package’ com.wangxiaoan1234: :
对应JAVA的包的结构,是main目录里java的目录结构。
使用maven-archetype-webapp
原型不会自动创建java目录,如果使用默认的maven-archetype-quickstart
对应数字1027,生成的项目结构如下:
小贴士:Win查看目录结构树的命令是命令行输入:tree
quickstrat
└─src
├─main
│ └─java
│ └─com
│ └─wangxiaoan1234
└─test
└─java
└─com
└─wangxiaoan1234
我填com.wangxiaoan1234,java目录下的结构就是com/wangxiaoan1234
下面这个才是原型maven-archetype-webapp
生成的目录树结构:
webapp
└─src
└─main
├─resources
└─webapp
└─WEB-INF
项目\src\main\webapp\WEB-INF\web.xml内容如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
工程根目录下的pom.xml文件如下:只引用了Junit依赖
<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>com.wangxiaoan1234</groupId>
<artifactId>webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>webapp</finalName>
</build>
</project>
项目\src\main\webapp\index.jsp,内容如下:
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
2.2.1.2 编译项目
进入到webapp工程目录下,执行命令mvn clean compile
编译成功会有如下信息:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building webapp Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ webapp ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ webapp ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ webapp ---
[INFO] No sources to compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.584 s
[INFO] Finished at: 2017-08-20T09:00:45+08:00
[INFO] Final Memory: 7M/16M
[INFO] ------------------------------------------------------------------------
BUILD SUCCESS和No sources to compile同时出现,编译是成功了,但是因为没有java类文件,所以没有资源被编译。
2.2.1.3 打包项目
那就直接打包好了:进入到webapp工程目录下,执行命令mvn clean compile
c:\Users\DELL\Desktop\maven\webapp>mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building webapp Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ webapp ---
[INFO] Deleting c:\Users\DELL\Desktop\maven\webapp\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ webapp ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ webapp ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ webapp ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory c:\Users\DELL\Desktop\maven\webapp\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ webapp ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ webapp ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ webapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [webapp] in [c:\Users\DELL\Desktop\maven\webapp\target\webapp]
[INFO] Processing war project
[INFO] Copying webapp resources [c:\Users\DELL\Desktop\maven\webapp\src\main\webapp]
[INFO] Webapp assembled in [51 msecs]
[INFO] Building war: c:\Users\DELL\Desktop\maven\webapp\target\webapp.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.647 s
[INFO] Finished at: 2017-08-20T17:48:32+08:00
[INFO] Final Memory: 8M/20M
[INFO] ------------------------------------------------------------------------
2.2.1.4 发布项目
成功在项目/target/下生成了webapp.war文件。把文件放到D:\tools\tomcat-7.0.57\webapps
目录下(找到自己对应的),到双击D:\tools\tomcat-7.0.57\bin\startup.bat
(如果配置了Tomcat环境变量直接控制台startup),启动Tomcat服务。
信息: Server startup in 606 ms
浏览器输入:http://localhost:8080/webapp/
2.2.1 使用maven-archetype-quickstart原型
2.2.1.1 创建项目
步骤和使用maven-archetype-webapp
原型一样,只是Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):
这里选1027。
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: c:\Users\DELL\Desktop\maven
[INFO] Parameter: package, Value: com.wangxiaoan1234
[INFO] Parameter: groupId, Value: com.wangxiaoan1234
[INFO] Parameter: artifactId, Value: quickstrat
[INFO] Parameter: packageName, Value: com.wangxiaoan1234
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: c:\Users\DELL\Desktop\maven\quickstrat
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:15 min
[INFO] Finished at: 2017-08-20T18:16:09+08:00
[INFO] Final Memory: 10M/49M
[INFO] ------------------------------------------------------------------------
quickstrat\下pom.xml文件内容如下:只引用了Junit依赖。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangxiaoan1234</groupId>
<artifactId>quickstrat</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>quickstrat</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>
quickstrat\src\main\java\com\wangxiaoan1234\有以下文件App.java
,内容如下:
package com.wangxiaoan1234;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
quickstrat\src\test\java\com\wangxiaoan1234\下有以下测试类:TestApp.java
,内容如下:
package com.wangxiaoan1234;
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 );
}
}
2.2.1.2 编译项目
进入到quickstrat工程目录下,执行命令mvn clean compile
c:\Users\DELL\Desktop\maven\quickstrat>mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building quickstrat 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ quickstrat ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quickstrat ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory c:\Users\DELL\Desktop\maven\quickstrat\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ quickstrat ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to c:\Users\DELL\Desktop\maven\quickstrat\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.925 s
[INFO] Finished at: 2017-08-20T18:16:55+08:00
[INFO] Final Memory: 11M/26M
[INFO] ------------------------------------------------------------------------
2.2.1.3 打包项目
c:\Users\DELL\Desktop\maven\quickstrat>mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building quickstrat 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ quickstrat ---
[INFO] Deleting c:\Users\DELL\Desktop\maven\quickstrat\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quickstrat ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory c:\Users\DELL\Desktop\maven\quickstrat\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ quickstrat ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to c:\Users\DELL\Desktop\maven\quickstrat\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ quickstrat ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory c:\Users\DELL\Desktop\maven\quickstrat\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ quickstrat ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to c:\Users\DELL\Desktop\maven\quickstrat\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ quickstrat ---
[INFO] Surefire report directory: c:\Users\DELL\Desktop\maven\quickstrat\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.wangxiaoan1234.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ quickstrat ---
[INFO] Building jar: c:\Users\DELL\Desktop\maven\quickstrat\target\quickstrat-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.323 s
[INFO] Finished at: 2017-08-20T18:18:07+08:00
[INFO] Final Memory: 13M/31M
[INFO] ------------------------------------------------------------------------
quickstrat\target\目录下生成了quickstrat-1.0-SNAPSHOT.jar
文件。
2.2.1.4 测试项目
进入到quickstrat\target\classes\文件夹,输入:java com.wangxiaoan1234.App
,运行结果如下
c:\Users\DELL\Desktop\maven\quickstrat\target\classes>java com.wangxiaoan1234.App
Hello World!
这里注意:千万不能进入到App.java对应的文件夹,然后java App,会提示错误: 找不到或无法加载主类 com.wangxiaoan1234.App
c:\Users\DELL\Desktop\maven\quickstrat\target\classes\com\wangxiaoan1234>java App
错误: 找不到或无法加载主类 App