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