Maven學習(二)使用命令創建maven項目


創建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端口是都被占用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM