Maven是Apache旗下的管理Java項目jar包的項目管理工具,有了它可以很方便構建和管理我們的Java項目,你不必在互聯網上逐個查找你需要的第三方jar包,你只需在maven repository(https://mvnrepository.com/)上搜索就可以了,包括所有的版本。下面記錄學習過程的第一個Maven項目,在學習之前需要配置JDK和Maven的環境變量,具體需要查找資料搭建,不難。注意:JDK版本需要1.7及以上,Maven的官網下載也有說明(requirement)。如果在終端輸入命令mvn -v顯示如下信息的為安裝成功了,否則為安裝失敗。創建的文件都存到github上了,地址:https://github.com/quanbisen/firstmaven
博文內容:
- 創建maven項目文件
- maven項目文件說明
- 編寫項目源代碼及測試代碼
- 編譯項目、運行測試和打包
- 生成站點和報告文件
1. 創建maven項目文件
創建maven項目文件,在終端執行mvn archetype:generate就可以了,執行命令
mvn archetype:generate
它會聯網自動下載一些需要的插件文件,然后要求選擇項目的類型(Choose archetype),我按了enter選擇默認(默認是7: internal -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)),包含maven工程樣例。
然后到輸入groupId、artifactId、version和package,groupId一般輸入公司名稱就可以了,而artifactId輸入項目名稱,package為包名。如下圖所示:
最后enter鍵確定,提示創建成功。
執行切換目錄命令,進入創建的項目,查看創建的項目文件結構。
cd firstmaven #切換目錄到firstmaven tree #查看該文件夾下目錄結構
2. maven項目文件說明
上面的結構圖可以看到maven項目的結構,由一個pom.xml文件和src目錄組成,src下面分為main和test。pom.xml文件是maven的項目管理文件,可以向該文件添加dependency(即jar包)、設置編譯、打包等插件等。main文件夾存放項目的源代碼,test文件存放測試的代碼(這里默認創建了helloworld的App模板了)。
- pom.xml文件(自動生成的)
<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>edu.gzmtu</groupId> <artifactId>firstmaven</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>firstmaven</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>
上面的pom.xml文件是默認生成的,其詳細說明如下:
<groupId>:創建項目時指定的groupId
<artifactId>:創建項目時指定的artifactId
<version>:創建項目時指定的version
<packaging>:項目編譯好后,打成jar包安裝發布
<denpendency>:測試時需要的JUnit jar包,groupId為junit,artifactId為junit,version為3.8.1,scope為test。
- main文件夾
main文件夾存放項目java源文件,如創建的模板文件的App.java
>>main/java/lollipop/App.java
package lollipop; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
- test文件夾
test文件存放源代碼的測試文檔,如創建的模板文件的AppTest.java
>>test/java/lollipop/AppTest.java
package lollipop; 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 ); } }
3. 編寫項目源代碼及測試代碼
這里編寫一個統計某個字符串某個字符出現次數的Util類,並編寫UtilTest類的測試方法。其中Util類存放在main目錄下的lollipop包,UtilTest類存放在test目錄下的lollipop包,並且修改junit的版本為4.x版本,3.x版本我測試時報錯。
>>main/java/lollipop/Util.java
package lollipop; /** * 統計字符的一個工具類 * @author super lollipop * @version 2019/10/6 */ public final class Util { /** * 統計某個字符串某個字符出現次數的函數 * @param string 某個字符串 * @param character 某個字符串 * @return int 數字 * */ public static int countCharacter(String string,char character){ char[] chars = string.toCharArray(); int count = 0; for (char c:chars){ if (c == character){ count = count + 1; } } return count; } }
>>test/java/lollipop/UtilTest.java
package lollipop; import junit.framework.Assert; import org.junit.Test; /** * 測試Util工具類的測試類 * @author super lollipop * @version 2019/10/6 */ public class UtilTest { /** * 單元測試,對Util的countCharacter進行測試*/ @Test public void testCountCharacter(){ String string= "計科164-09-lollipop"; char character = '-'; int countExpect = 2; int count = Util.countCharacter(string,character); Assert.assertEquals(countExpect,count); } }
>>pom.xml文件 (修改了junit的版本為4.10)
<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>edu.gzmtu</groupId> <artifactId>firstmaven</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>firstmaven</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>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>
4. 編譯項目、運行測試和打包
編譯項目使用mvn compile命令,執行命令:
mvn compile
......
可以看到編譯成功了(BUILD SUCCESS),輸入mvn clean可以把編譯的class文件清除掉。下面開始測試,執行命令:
mvn test
......
可以看到測試運行了兩個類,AppTest(模板創建的)和UtilTest(我創建的)測試都通過了。我們還可以把本項目打包成jar文件,輸入命令:
mvn install
......
可以看到提示信息上的/home/lollipop/.m2/repository/edu/gzmtu/firstmaven/1.0/firstmaven-1.0.jar,mvn把我們的項目文件jar包存儲到maven管理的repository目錄下了。執行ll命令查看目錄下的~/.m2/repository/edu/gzmtu/firstmaven/1.0/文件,可以看到生成的jar包文件
5. 生成站點和報告文件
在執行生成站點和報告文件之前,需要先添加插件,具體為添加maven-project-info-reports-plugin和maven-javadoc-plugin,只需要修改pom.xml文件就可以添加插件了。
>>pom.xml(添加了插件的)
<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>edu.gzmtu</groupId> <artifactId>firstmaven</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>firstmaven</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <version>2.7</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.7</version> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>
- 生成站點文件
生成站點文件輸入命令mvn site就可以了,它會生成一個index.html文件並存儲在target/site/目錄下,輸入命令:
mvn site
......
用瀏覽器打開站點文件,文件內容顯示本項目的信息,包括插件、版權、團隊等信息(我這里沒有配置)。如下圖所示:
- 生成報告文檔
生成報告文檔是生成API Doc文檔,和JDK的Doc文檔類似,它會生成一個index.html文件並存儲在target/site/apidocs/目錄下,輸入命令:
mvn javadoc:javadoc
......
用瀏覽器打開報告文件,文件顯示了本項目的Java源代碼的API,如下圖所示:
------分割線------
順帶說,上面介紹的是maven在本地的使用。現在IDEA編譯器已經集成了maven了,可以很方便地使用圖形界面管理我們的Java項目,當然IDEA也支持命令行方式操作。