日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven项目构建

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven项目构建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Maven是apache的一個開源項目。是一個用來把源代碼構建成可發布的構件的工具。

Maven的功能非常強大,可以認為是一個項目管理工具,不僅僅是一個構建工具。

Maven本身的核心很小,但是可以在上面擴展出很多的插件。Mven采用的是插件的思想,通過插件的功能擴展出很多的功能。同時Maven采用約定大于配置的思想,在項目中采用了很多約定規則來減少配置。不想ant這樣的構建工具需要很多的配置。作為一個項目構建工具,最重要的是管理項目的庫和項目之間的依賴關系。

本文將以以下面的例子,來作為學習maven的一個過程。

假設要構建一個名為Content-Search的項目,該項目包含了三個子項目:contentSearch-dal,contentSearch-biz,contentSearch-web。項目采用Struts2、hibernate3、spring2.5的框架結合。使用mysql數據庫。

contentSearch-web:Web層的代碼, struts2+spring2.5結合的框架。

contentSearch-biz:業務邏輯層代碼。

contentSearch-dal:數據持久層代碼。

三個項目之間的依賴和對外部庫的依賴關系大概如下:

?

?

?

?

作為從一個項目構建工具角度出發,maven主要要實現的就是項目的依賴的二方、三方庫管理,項目之間的依賴管理。以及項目的整個生命周期的管理,包括編譯(compile)、測試(test)、打包(packaging)、部署(install)等。

以以上為背景,先介紹下maven的基本概念:

依賴管理:對每個項目對外部的依賴的管理。

遠程倉庫:maven外部引用倉庫的管理。

項目LifeCycle抽象和管理:項目生命周期編譯、測試和打包等過程的抽象和管理。

?

  • 1.?Maven安裝
  • http://maven.apache.org/download.html在上面根據不同的操作系統選擇不同的安裝版本。

    安裝后的目錄結構如下:

    bin/:maven腳本

    boot/

    conf/:全局的settings.xml。?如果需要自己定制可以覆蓋.m2文件夾里的settings.xml文件。

    lib/:有包含maven核心的jar文件

    設置環境變量: M2_HOME=maven安裝路徑??Path: $M2_HOME/bin

    ?

    ?

  • 2.?Maven核心概念
  • groupId , artifactId, packaging, version:——?以上4個是?Maven?的?坐?標(coordinates),它們唯一標識了一個項目。

    groupId:?團體,公司,小組,組織,項目,或者其它團體。如contentSearch-web,contentSearch-dal,contentSearch-biz同屬一個groupId。

    artifactId:在?groupId?下的表示一個單獨項目的唯一標識符。項目名稱ID?。

    packaging:?標識項目的類型,如jar,war等。

    Version:版本號。

    以文章開頭的例子為例,contentSearch-web的坐標可以定義如下:

    groupId: com.companyName.contentSearch

    artifactId:contentSearch-web

    packaging: war

    Version:1.0。

    而contentSearch-dal的坐標如下:

    groupId: com.companyName.contentSearch

    artifactId:contentSearch-dal

    packaging: jar

    Version:1.0。

    在一個?Maven?倉庫中,所有的東西存儲在一個與?Maven?項目坐標十分匹配的目錄結構中。

    /groupId/artifactId/version/artifactId-version.packaging.

    ?

    POM:項目抽象模型

    這是maven非常核心的概念。Maven通過它來管理項目。每一個項目都有一個pom.xml文件,該文件定義了改項目的基本信息,依賴關系等,maven對項目的生命周期管理也是基于此文件。以contentSearch-dal為例,該項目的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/maven-v4_0_0.xsd">

    ?????????<modelVersion>4.0.0</modelVersion>

    ?????????<parent>

    ???????????????????<groupId> com.companyName.contentSearch</groupId>

    ???????????????????<artifactId>contentSearch</artifactId>

    ???????????????????<version>1.0</version>

    ?????????</parent>

    ?????????<artifactId>contentSearch-dal</artifactId>

    ?????????<packaging>jar</packaging>

    ?????????<version>1.0</version>

    ?????????<name>contentSearch-dal</name>

    ?????????<url>http://maven.apache.org</url>

    ?????????<dependencies>

    ???????????????????<dependency>

    ????????????????????????????<groupId>junit</groupId>

    ????????????????????????????<artifactId>junit</artifactId>

    ????????????????????????????<version>3.8.1</version>

    ????????????????????????????<scope>test</scope>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>generalorm</groupId>

    ????????????????????????????<artifactId>hibernate</artifactId>

    ????????????????????????????<version>3.0</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>mysql</groupId>

    ????????????????????????????<artifactId>mysql-connector-java</artifactId>

    ????????????????????????????<version>5.1.6</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>log4j</groupId>

    ????????????????????????????<artifactId>log4j</artifactId>

    ????????????????????????????<version>1.2.14</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>dom4j</groupId>

    ????????????????????????????<artifactId>dom4j</artifactId>

    ????????????????????????????<version>1.6.1</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>slf4j</groupId>

    ????????????????????????????<artifactId>slf4j-api</artifactId>

    ????????????????????????????<version>1.5.8</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>slf4j</groupId>

    ????????????????????????????<artifactId>slf4j-nop</artifactId>

    ????????????????????????????<version>1.5.2</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>antlr</groupId>

    ????????????????????????????<artifactId>antlr</artifactId>

    ????????????????????????????<version>2.7.6</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>jta</groupId>

    ????????????????????????????<artifactId>jta</artifactId>

    ????????????????????????????<version>1.1</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>javassist</groupId>

    ????????????????????????????<artifactId>javassist</artifactId>

    ????????????????????????????<version>3.9.0.GA</version>

    ???????????????????</dependency>

    ???????????????????<dependency>

    ????????????????????????????<groupId>commons-collections</groupId>

    ????????????????????????????<artifactId>commons-collections</artifactId>

    ????????????????????????????<version>3.1</version>

    ???????????????????</dependency>

    ?????????</dependencies>

    </project>

    Repository

    倉庫,二方庫,三方庫的概念。每當安裝完成maven之后就會有一個默認的本地倉庫和遠程倉庫。本地倉庫在用戶工作目錄下的.m2文件夾,如在linux下為/home/yblin/.m2。遠程repository默認在settings.xml里面配置,如果要修改該文件必須在.m2文件夾下面替換一下即可。當進行編譯的時候,maven會先查找本地Repository,如果本地Repository沒有,會去取遠程repository?。

    ?

    ?

  • 3.?Maven命令
  • 創建一個項目:

    mvn archetype:create -DgroupId=com.xxx.simple??- DartifactId =simple

    archetype:create是一個goal,-DgroupId=org.sonatype.mavenbook.ch03代表要傳到目標goal任務的參數,以-D開頭。

    插件和目標:maven archetype:create. Archetype是插件標識,create是目標標識。

    一個?Maven?插件是一個單個或者多個目標的集合。Maven?插件的例子有一些簡單但核心的插件,像?Jar?插件,它包含了一組創建JAR?文件的目標,Compiler插件,它包含了一組編譯源代碼和測試代碼的目標,或者?Surefire?插件,它包含一組運行單元測試和生成測試報告的目標。而其它的,更有專門的插件包括:Hibernate3?插件,用來集成流行的持久化框架?Hibernate,JRuby?插件,它讓你能夠讓運行?ruby?稱為?Maven?構建的一部分或者用?Ruby?來編寫?Maven?插件。Maven也提供了自定義插件的能力。一個定制的插件可以用?Java?編寫,或者用一些其它的語言如?Ant,Groovy,beanshell?和之前提到的?Ruby。

    ?

    生命周期命令:maven install

    Mvn install命令沒有進行任何插件配置或者定制,所以這個例子綁定了一組標準插件的目標到默認的生命周期。當?Maven?經過以?package?為結尾的默認生命周期的時候,下面的目標按順序被執行:

    resources:resources

    ??????Resources?插件的?resources?目標綁定到了?resources?階段。這個目標復

    ??????制?src/main/resources?下的所有資源和其它任何配置的資源目錄,到輸

    ??????出目錄。

    compiler:compile

    ??????Compiler?插件的?compile?目標綁定到了?compile?階段。這個目標編譯

    ??????src/main/java?下的所有源代碼和其他任何配置的資源目錄,到輸出目

    ??????錄。

    resources:testResources

    ??????Resources?插件的?testResources?目標綁定到了?test-resources?階段。

    ??????這個目標復制?src/test/resources?下的所有資源和其它任何的配置的測

    ??????試資源目錄,到測試輸出目錄。

    compiler:testCompile

    ??????Compiler?插件的?testCompile?目標綁定到了?test-compile?階段。這個目

    ??????標編譯?src/test/java?下的測試用例和其它任何的配置的測試資源目錄,

    ??????到測試輸出目錄。

    surefire:test

    ??????Surefire?插件的?test?目標綁定到了?test?階段。這個目標運行所有的測試

    ??????并且創建那些捕捉詳細測試結果的輸出文件。默認情況下,如果有測試失

    ??????敗,這個目標會終止。

    jar:jar

    ??????Jar?插件的?jar?目標綁定到了?package?階段。這個目標把輸出目錄打包成

    ??????JAR?文件。

    當?Maven?運行一個目標的時候,每個目標都會訪問定義在項目?POM?里的信息。

    ?

    ?

    其他命令:

    mvn install:install-file -DgeneratePom=true -DgroupId=jep -DartifactId=jep -Dversion=3.3.0 -Dpackaging=jar -Dfile=E:/lib/LIB_COMMON/jep-3.3.0-trial.jar:添加一個包到依賴庫。

    mvn dependency:resolve??mvn dependency:tree瀏覽項目依賴。

    mvn archetype:create?:創建?Maven?項目

    mvn compile?:編譯源代碼

    mvn test-compile?:編譯測試代碼

    mvn test?:?運行應用程序中的單元測試

    mvn site?:?生成項目相關信息的網站

    mvn clean?:清除目標目錄中的生成結果

    mvn package?:?依據項目生成?jar?文件

    mvn install?:在本地?Repository?中安裝?jar

    mvn eclipse:eclipse?:生成?Eclipse?項目文件

  • 4.?Maven實踐
  • ?

    以文章開頭例子為例,做為實踐。

    1.?下載依賴包,并添加到本地repository.如果配置了遠程依賴庫里面已經有了這些依賴包,那無需下載,在編譯時會自動下載到本地庫。

    下載struts2,hibernate2,spring2.5,mysql-jdbc等相關的包到本地,通過命令安裝到本地repository.

    mvn install:install-file -DgrouptId=framework -DartifactId=spring-beans -Dversion=2.5.6 -Dfile=spring-beans-2.5.6.jar

    該命令將spring-beans-2.5.6.jar安裝到本地repository.

    2.?創建總控項目

    mvn archetype:create命令創建總控項目,修改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/maven-v4_0_0.xsd">

    ??<modelVersion>4.0.0</modelVersion>

    ??<groupId>?com.companyName.contentSearch?</groupId>

    ??<artifactId>contentSearch</artifactId>

    ??<packaging>pom</packaging>

    ??<version>1.0</version>

    ??<name>Chapter 6 Simple Parent Project</name>

    ??<modules>

    ????<module>contentSearch-dal</module>

    ????<module>contentSearch-biz</module>

    ????<module>contentSearch-web</module>

    ??</modules>

    ??<build>

    ????<pluginManagement>

    ??????<plugins>

    ????????<plugin>

    ??????????<groupId>org.apache.maven.plugins</groupId>

    ??????????<artifactId>maven-compiler-plugin</artifactId>

    ??????????<configuration>

    ????????????<source>1.5</source>

    ????????????<target>1.5</target>

    ??????????</configuration>

    ????????</plugin>

    ??????</plugins>

    ???</pluginManagement>

    ??</build>

    ??<dependencies>

    ????<dependency>

    ??????<groupId>junit</groupId>

    ??????<artifactId>junit</artifactId>

    ??????<version>3.8.1</version>

    ??????<scope>test</scope>

    ????</dependency>

    ??</dependencies>

    </project>

    3.?創建子項目

    總控項目包括了三個子項目,在總控項目文件夾下面創建3個子項目如下:

    contentSearch-dal:

    <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>

    ?

    <parent>

    ?????<groupId>?com.companyName.contentSearch?</groupId>

    ?????<artifactId>contentSearch</artifactId>

    ?????<version>1.0</version>

    </parent>

    <artifactId>contentSearch-dal</artifactId>

    <packaging>jar</packaging>

    <version>1.0</version>

    <name>contentSearch-dal</name>

    <url>http://maven.apache.org</url>

    <dependencies>

    ?????<dependency>

    ?????????<groupId>junit</groupId>

    ?????????<artifactId>junit</artifactId>

    ?????????<version>3.8.1</version>

    ?????????<scope>test</scope>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>generalorm</groupId>

    ?????????<artifactId>hibernate</artifactId>

    ?????????<version>3.0</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>mysql</groupId>

    ?????????<artifactId>mysql-connector-java</artifactId>

    ?????????<version>5.1.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>log4j</groupId>

    ?????????<artifactId>log4j</artifactId>

    ?????????<version>1.2.14</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>dom4j</groupId>

    ?????????<artifactId>dom4j</artifactId>

    ?????????<version>1.6.1</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>slf4j</groupId>

    ?????????<artifactId>slf4j-api</artifactId>

    ?????????<version>1.5.8</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>slf4j</groupId>

    ?????????<artifactId>slf4j-nop</artifactId>

    ?????????<version>1.5.2</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>antlr</groupId>

    ?????????<artifactId>antlr</artifactId>

    ?????????<version>2.7.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>jta</groupId>

    ?????????<artifactId>jta</artifactId>

    ?????????<version>1.1</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>javassist</groupId>

    ?????????<artifactId>javassist</artifactId>

    ?????????<version>3.9.0.GA</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>commons-collections</groupId>

    ?????????<artifactId>commons-collections</artifactId>

    ?????????<version>3.1</version>

    ?????</dependency>

    </dependencies>

    </project>

    contentSearch-biz:

    <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>

    <parent>

    ?????<groupId>?com.companyName.contentSearch</groupId>

    ?????<artifactId>contentSearch</artifactId>

    ?????<version>1.0</version>

    </parent>

    <artifactId>contentSearch-biz</artifactId>

    <packaging>jar</packaging>

    <version>1.0</version>

    <name>contentSearch-biz</name>

    <url>http://maven.apache.org</url>

    <dependencies>

    ?????<dependency>

    ?????????<groupId>junit</groupId>

    ?????????<artifactId>junit</artifactId>

    ?????????<version>3.8.1</version>

    ?????????<scope>test</scope>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>?com.companyName.contentSearch?</groupId>

    ?????????<artifactId>contentSearch-dal</artifactId>

    ?????????<version>1.0</version>

    ?????????<scope></scope>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>com.sun</groupId>

    ?????????<artifactId>mail</artifactId>

    ?????????<version>1.4.3</version>

    ?????????<scope></scope>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>com.sun</groupId>

    ?????????<artifactId>activation</artifactId>

    ?????????<version>1.1.1</version>

    ?????????<scope></scope>

    ?????</dependency>

    </dependencies>

    </project>

    contentSearch-web:

    <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>

    <parent>

    ?????<groupId>?com.companyName.contentSearch?</groupId>

    ?????<artifactId>contentSearch</artifactId>

    ?????<version>1.0</version>

    </parent>

    <artifactId>contentSearch-web</artifactId>

    <packaging>war</packaging>

    <version>1.0-SNAPSHOT</version>

    <name>contentSearch-web Maven Webapp</name>

    <url>http://maven.apache.org</url>

    <dependencies>

    ?????<dependency>

    ?????????<groupId>apache.tomcat</groupId>

    ?????????<artifactId>servlet-api</artifactId>

    ?????????<version>2.5</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>apache.commons</groupId>

    ?????????<artifactId>commons-fileupload</artifactId>

    ?????????<version>1.2.1</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>commons-logging</groupId>

    ?????????<artifactId>commons-logging</artifactId>

    ?????????<version>1.0.4</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>apache.tomcat</groupId>

    ?????????<artifactId>jsp-api</artifactId>

    ?????????<version>1.0</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>junit</groupId>

    ?????????<artifactId>junit</artifactId>

    ?????????<version>3.8.1</version>

    ?????????<scope>test</scope>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>struts2-core</artifactId>

    ?????????<version>2.1.8</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>xwork-core</artifactId>

    ?????????<version>2.1.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>spring-core</artifactId>

    ?????????<version>2.5.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>spring-web</artifactId>

    ?????????<version>2.5.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>spring-context</artifactId>

    ?????????<version>2.5.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>spring-beans</artifactId>

    ?????????<version>2.5.6</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>freemarker</artifactId>

    ?????????<version>2.3.15</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>struts2-spring-plugin</artifactId>

    ?????????<version>2.1.8</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>?com.companyName.contentSearch?</groupId>

    ?????????<artifactId>contentSearch-biz</artifactId>

    ?????????<version>1.0</version>

    ?????</dependency>

    ?????<dependency>

    ?????????<groupId>framework</groupId>

    ?????????<artifactId>struts2-json-plugin</artifactId>

    ?????????<version>2.1.8</version>

    ?????</dependency>

    </dependencies>

    <build>

    ?????<finalName>contentSearch-web</finalName>

    ?????<plugins>

    ?????????<plugin>

    ?????????????<groupId>org.mortbay.jetty</groupId>

    ?????????????<artifactId>maven-jetty-plugin</artifactId>

    ?????????????<version>6.1.9</version>

    ?????????</plugin>

    ?????</plugins>

    </build>

    </project>

    4.?編寫代碼,打包運行。

    mvn clean install

    mvn jetty:run

    以上只是從構建的角度介紹maven的使用,還有很多其他的特性待以后學習后再做介紹。作為一個優秀的構建工具,maven還是值得推薦的。

    ?

    http://maven.apache.org/guides/?

    附上官網上的指南地址。

    轉載于:https://www.cnblogs.com/langren1992/p/5221993.html

    總結

    以上是生活随笔為你收集整理的maven项目构建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。