創建maven項目
手動
嚴格參照約定目錄結構,我們開始手動新增文件夾
命令方式
project項目
我們也可以使用maven自動生成目錄:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
這句話的命令是創建一個默認的項目,但我在執行這個命令時,命令行會停在
[INFO] Generating project in Batch mode
我操作時,這句話會停很久,
增加一個-X參數,可以查看詳細信息 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -X
可以看到,程序停在了下面這一行:[DEBUG] Searching for remote catalog: http://repo1.maven.org/maven2/archetype-catalog.xml
去查詢這個文件的時候網絡比較差或者其他原因,導致掛在那里。
解決方法很簡單:
1. 把上述地址復制到瀏覽器中,下載這個文件到本地。 2. 把文件archetype-catalog.xml復制到目錄${user.home}\.m2\repository\org\apache\maven\archetype\archetype-catalog\2.2(改過的默認目錄的則放在自己修改好目錄)下面。 3. 在上述命令后增加參數-DarchetypeCatalog=local,讀取本地文件即可。
生成項目文件在:
web項目
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-WebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
生成的文件都存在一個地方,再此就不贅述了。但是 創建好的JavaWeb項目中目前只有src/main/resources目錄,因此還需要手動添加src/main/java、src/test/java、src/test/resources。
項目構建安裝及使用
我的源碼文件:
package com.lsk.mavenCode; public class HelloWorld{ public String doSay(String perName){ return perName+" say: Hello world"; } }
測試文件夾下的代碼:
package com.lsk.mavenCode; //導入junit的包 import org.junit.Test; import static junit.framework.Assert.*; public class HelloWorldTest { @Test public void testConsoleHello(){ HelloWorld hello = new HelloWorld(); String word = hello.doSay("javaTester"); assertEquals("javaTester say: Hello world",word); } }
此時的pom.xml文件內容:
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--所有的Maven項目都必須配置這四個配置項--> <modelVersion>4.0.0</modelVersion> <!--groupId指的是項目名的項目組,默認就是包名--> <groupId>com.lsk.mavenCode</groupId> <!--artifactId指的是項目中的某一個模塊,默認命名方式是"項目名-模塊名"--> <artifactId>ConsoleHello</artifactId> <!--version指的是版本,這里使用的是Maven的快照版本--> <version>SNAPSHOT-0.0.1</version> <name>ConsoleHello</name> <!--添加依賴的jar--> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> </dependencies> </project>
編譯
測試
打包
mvn package
我們可以見到(注意目錄)
安裝
mvn install
在我們的本地maven倉庫(注意目錄是包的地址):
細心的話會發現,后面的每個命令,都會包含前面的命令,其中構建還包含一個mvn clean命名。
在其他項目中使用通過Maven安裝生成的項目jar包
新建項目
新項目的pom.xml文件;
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--所有的Maven項目都必須配置這四個配置項--> <modelVersion>4.0.0</modelVersion> <!--groupId指的是項目名的項目組,默認就是包名--> <groupId>cn.eric.mavenCode</groupId> <!--artifactId指的是項目中的某一個模塊,默認命名方式是"項目名-模塊名"--> <artifactId>CallConsoleHello</artifactId> <!--version指的是版本,這里使用的是Maven的快照版本--> <version>SNAPSHOT-0.0.1</version> <name>CallConsoleHello</name> <!--添加依賴的jar--> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>com.lsk.mavenCode</groupId> <artifactId>ConsoleHello</artifactId> <version>SNAPSHOT-0.0.1</version> <scope>compile</scope> </dependency> </dependencies> </project>
新建項目的源碼:
package cn.eric.mavenCode; import com.lsk.mavenCode.HelloWorld; public class CallHelloWorld{ public String sayHelloWorldByCall(String personName){ HelloWorld helloWorld=new HelloWorld(); String result= helloWorld.doSay(personName); return result; } }
Test文件下(有好幾層):
package cn.eric.mavenCode; import static junit.framework.Assert.assertEquals; import org.junit.Test; import com.lsk.mavenCode.HelloWorld; public class CallHelloWorldTest{ @Test public void testCallHelloWorld(){ CallHelloWorld call=new CallHelloWorld(); String result=call.sayHelloWorldByCall("Eric"); assertEquals("Eric say: Hello world",result); } }
運行上面的命令,
說明引用是成功的。
打包發布web項目
是用外部tomcat
上面使,使用命令創建的JavaWeb項目是一個空的項目,只有一個index.jsp頁面,我們使用Maven將Web項目打包發布運行。
使用命令切換到web項目(到有pom.xml的根),使用 mvn package進行打包:
然后我們可以在web項目的target下看到 .war文件:
將生成的.war文件放到 tomcat的 webapps 目錄下:
開啟tomcat,
打包發布成功。
使用內置jetty
除了使用Tomcat服務器運行Web項目之外,我們還可以在Web項目中集成Jetty發布運行,首先在pom.xml文件中配置Jetty插件,如下:
<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.mycompany.app</groupId> <artifactId>my-WebApp</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>my-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> <!--內嵌jetty--> <build> <finalName>myWebApp</finalName> <pluginManagement> <!--配置Jetty--> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build> </project>
在web目錄下,有pom.xml的那一層,執行命令:mvn jetty:run:
出現這個,代表已經可以在瀏覽器運行了。
如果啟動內置jetty失敗的話,可以看下自己的8080端口是都被占用了。