6 使用Maven創(chuàng)建Java項(xiàng)目

在本篇文章中,將展示如何使用 Maven 來(lái)創(chuàng)建一個(gè) Java 項(xiàng)目纹蝴,導(dǎo)入其到Eclipse IDE庄萎,并打包 Java 項(xiàng)目到一個(gè) JAR 文件。

開發(fā)環(huán)境介紹

IDE: MyEclipse 10.7
jdk: 1.6
maven:apache-maven-3.2.5
基本環(huán)境只要上面這些就行.

確保Maven安裝正確.

1. 從 Maven 模板創(chuàng)建一個(gè)項(xiàng)目

在終端(* UNIX或Mac)或命令提示符(Windows)中塘安,瀏覽到要?jiǎng)?chuàng)建 Java 項(xiàng)目的文件夾糠涛。鍵入以下命令:

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

這告訴 Maven 來(lái)從 maven-archetype-quickstart 模板創(chuàng)建 Java 項(xiàng)目。如果忽視 archetypeArtifactId 選項(xiàng)兼犯,一個(gè)巨大的 Maven 模板列表將列出忍捡。

例如,這里的工作目錄是:E:\WorkSpace\Study切黔,執(zhí)行命令過(guò)程時(shí)間可能比較久砸脊,看個(gè)人的網(wǎng)絡(luò)狀況。

E:\WorkSpace\Study>mvn archetype:generate -DgroupId=com.gp6 -DartifactId=MavenTest
or -DarchetypeArtifactId=maven -archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: basedir, Value: E:\WorkSpace\Study
[INFO] Parameter: package, Value: com.yiibai
[INFO] Parameter: groupId, Value: com.yiibai
[INFO] Parameter: artifactId, Value: MavenTest
[INFO] Parameter: packageName, Value: com.yiibai
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: E:\WorkSpace\Study\MavenTest
r
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.166 s
[INFO] Finished at: 2015-10-27T11:03:48+08:00
[INFO] Final Memory: 17M/114M
[INFO] ------------------------------------------------------------------------

在上述情況下绕娘,一個(gè)新的Java項(xiàng)目命名 “MavenTest”, 而整個(gè)項(xiàng)目的目錄結(jié)構(gòu)會(huì)自動(dòng)創(chuàng)建脓规。

注意
有少數(shù)用戶說(shuō) mvn archetype:generate 命令未能生成項(xiàng)目結(jié)構(gòu)栽连。 如果您有任何類似的問(wèn)題险领,不用擔(dān)心,只需跳過(guò)此步驟秒紧,手動(dòng)創(chuàng)建文件夾绢陌,請(qǐng)參閱下面的項(xiàng)目結(jié)構(gòu)。

2.Maven目錄布局

使用 mvn archetype:generate + maven-archetype-quickstart 模板, 以下項(xiàng)目的目錄結(jié)構(gòu)被創(chuàng)建熔恢。

MavenTest
   |-src
   |---main
   |-----java
   |-------com
   |---------gp6   
   |-----------App.java
   |---test|-----java
   |-------com
   |---------gp6
   |-----------AppTest.java
   |-pom.xml

所有的源代碼放在文件夾 /src/main/java/, 所有的單元測(cè)試代碼放入 /src/test/java/.

附加的一個(gè)標(biāo)準(zhǔn)的 pom.xml 被生成脐湾。這個(gè)POM文件類似于 Ant build.xml 文件,它描述了整個(gè)項(xiàng)目的信息叙淌,一切從目錄結(jié)構(gòu)秤掌,項(xiàng)目的插件愁铺,項(xiàng)目依賴

3. Eclipse IDE

為了使它成為一個(gè) Eclipse 項(xiàng)目,在終端進(jìn)入到 “MavenTest” 項(xiàng)目闻鉴,鍵入以下命令:

E:\WorkSpace\Study\MavenTest>mvn eclipse:eclipse

[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAIN
ER
[INFO] Not writing settings - defaults suffice
[INFO] Wrote Eclipse project for "MavenTest" to E:\WorkSpace\Study\MavenTest.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.104 s
[INFO] Finished at: 2017-05-03T15:13:59+08:00
[INFO] Final Memory: 15M/224M
[INFO] ------------------------------------------------------------------------

執(zhí)行以上命令后茵乱,它自動(dòng)下載更新相關(guān)資源和配置信息(需要等待一段時(shí)間),并產(chǎn)生 Eclipse IDE所要求的所有項(xiàng)目文件孟岛。要導(dǎo)入項(xiàng)目到Eclipse IDE中瓶竭,選擇 “File -> Import… -> General->Existing Maven Projects”

項(xiàng)目導(dǎo)入到 Eclipse IDE中。

目錄結(jié)構(gòu)
4. 更新POM

默認(rèn)的 pom.xml 太簡(jiǎn)單了渠羞,很多時(shí)候斤贰,你需要添加編譯器插件來(lái)告訴 Maven 使用哪個(gè) JDK 版本是用來(lái)編譯項(xiàng)目

 <build>
      <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
          </plugin>
      </plugins>
  </build>

從更新JUnit 3.8.1到最新的 4.11。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

Maven 坐標(biāo)

上面的XML代碼片段被稱為“Maven坐標(biāo)”次询,如果你需要 JUnit 的 jar荧恍,你需要找出其相應(yīng)的 Maven 坐標(biāo)。它適用于所有其他的依賴渗蟹,如Spring块饺,Hibernate,Apache 普通的等.

<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.gp6</groupId>
  <artifactId>MavenTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MavenTest</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-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
          </plugin>
      </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

在終端雌芽,再次發(fā)出同樣的命令 mvn eclipse:eclipse ,Maven將從Maven中心儲(chǔ)存庫(kù)下載插件項(xiàng)目依賴關(guān)系(JUnit)授艰,它會(huì)自動(dòng)保存到你的本地倉(cāng)庫(kù)。

5. 更新業(yè)務(wù)邏輯

測(cè)試驅(qū)動(dòng)開發(fā)(TDD)世落,先更新單元測(cè)試淮腾,以確保應(yīng)用程序(APP)對(duì)象有一個(gè)方法來(lái)生成包含恰好36位字母表的唯一密鑰。

  • AppTest.java
package com.gp6;

import junit.framework.TestCase;

import org.junit.Assert;
import org.junit.Test;

/**
 * Unit test for simple App.
 */
public class AppTest extends TestCase{
  
    
    @Test
    public void testLengthOfTheUniqueKey() {

        App obj = new App();
        Assert.assertEquals(36, obj.test().length());

    }
}

  • App.java
package com.gp6;

import java.util.UUID;

public class App {
    
    public static void main( String[] args ){
        App obj = new App();
        System.out.println("Unique ID : " + obj.test());
    }
    
    public String test(){
        String id = UUID.randomUUID().toString();
        return id;
    }
}

6. Maven 打包

將使用Maven這個(gè)項(xiàng)目屉佳,并輸出編譯成一個(gè) “jar” 的文件谷朝。 請(qǐng)參考 pom.xml 文件,包元素定義應(yīng)該包應(yīng)該輸出什么武花。

在終端輸入 mvn package :

E:\WorkSpace\Study\MavenTest> mvn package

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.gp6.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.083 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MavenTest ---
[INFO] Building jar: E:\WorkSpace\Study\MavenTest\target\MavenTest-1.0-SNAPSHOT
jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.237 s
[INFO] Finished at: 2017-05-03T16:21:31+08:00
[INFO] Final Memory: 14M/217M
[INFO] ------------------------------------------------------------------------

它編譯圆凰,運(yùn)行單元測(cè)試并打包項(xiàng)目成一個(gè) jar 文件,并把它放在 project/target 文件夾体箕。如果出錯(cuò):ERROR: Unable to locate the Javac Compiler in:, C:\Program Files (x86)\Java\jre6..\lib\tools.jar,Please ensure you are using JDK 1.4 or above and,not a JRE (the com.sun.tools.javac.Main class is required)...

####### 7. 示例

從項(xiàng)目的 jar 文件運(yùn)行應(yīng)用程序示例

E:\WorkSpace\Study\MavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 94e5fd1a-c038-415f-a8ed-7fc58c397369

E:\WorkSpace\Study\MavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 48df568a-4b4b-4964-b767-664e206ca4b5

E:\WorkSpace\Study\MavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 4ac9156c-2e4a-45f4-8644-0707ae28d5a6
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末专钉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子累铅,更是在濱河造成了極大的恐慌跃须,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娃兽,死亡現(xiàn)場(chǎng)離奇詭異菇民,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門第练,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辣苏,“玉大人晚胡,你說(shuō)我怎么就攤上這事。” “怎么了滑频?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵译荞,是天一觀的道長(zhǎng)背犯。 經(jīng)常有香客問(wèn)我脆烟,道長(zhǎng),這世上最難降的妖魔是什么志秃? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任怔球,我火速辦了婚禮,結(jié)果婚禮上浮还,老公的妹妹穿的比我還像新娘竟坛。我一直安慰自己,他們只是感情好钧舌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布担汤。 她就那樣靜靜地躺著,像睡著了一般洼冻。 火紅的嫁衣襯著肌膚如雪崭歧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天撞牢,我揣著相機(jī)與錄音率碾,去河邊找鬼。 笑死屋彪,一個(gè)胖子當(dāng)著我的面吹牛所宰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畜挥,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仔粥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蟹但?” 一聲冷哼從身側(cè)響起躯泰,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矮湘,沒(méi)想到半個(gè)月后斟冕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體口糕,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缅阳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片十办。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秀撇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出向族,到底是詐尸還是另有隱情呵燕,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布件相,位于F島的核電站再扭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夜矗。R本人自食惡果不足惜泛范,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望紊撕。 院中可真熱鬧罢荡,春花似錦、人聲如沸对扶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浪南。三九已至笼才,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間络凿,已是汗流浹背患整。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喷众,地道東北人各谚。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像到千,于是被迫代替她去往敵國(guó)和親昌渤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容