1. 程式人生 > >如何使用Maven和eclipse構建大資料開發框架專案

如何使用Maven和eclipse構建大資料開發框架專案

作為大資料開發者,特別是開發大資料應用程式的程式設計師或者框架師,在進行大資料專案開發,或者是研讀原始碼,的把相應的專案匯入到整合開發環境,本文用Maven和eclipse來構建大資料開發框架專案。比如說開發storm專案、Hadoop專案、Spark專案等,本文以構建storm專案為例進行圖文解讀。

提綱摘要:

第一部分:準備工作

第二部分:Maven原理的理解

第三部分:Maven相關環境的配置和部署

第一部分:準備工作:

         EclipseIDE:

         Maven壓縮包:

         Strom原始碼包:

         Win7作業系統:

第二部分:Maven原理的理解

Maven是基於專案物件模型(POM),可以通過一小段描述資訊來管理專案的構建,報告和文件的軟體專案管理工具。 Maven 除了以程式構建能力為特色之外,還提供高階專案管理工具。由於 Maven 的預設構建規則有較高的可重用性,所以常常用兩三行 Maven 構建指令碼就可以構建簡單的專案。由於 Maven 的面向專案的方法,許多 Apache Jakarta 專案現在使用 Maven,而且公司專案採用 Maven 的比例在持續增長。


A、POM

專案物件模型(Project ObjectModel,POM)描述專案的各個方面,每個Maven專案都應該有一個pom.xml檔案。

通常,pom.xml檔案由三個主要部分

組成(官方介紹):

l  專案管理部分包括專案的組織、開發人員名單、原始碼位置和錯誤跟蹤系統 URL 等資訊。

l  專案相關性部分包括關於專案相關性的資訊。

l  專案構建和報告部分包含專案構建資訊(如原始碼目錄、單元測試用例目錄)和要在構建中生成的報告。


B、座標

座標為構件(各種jar包)引入了秩序,世界上任何一個構件都可以使用Maven座標唯一標識,Maven座標的元素包括groupId artifactId version packaging classifier,我們在開發專案的時候,也需要定義一個座標,這是Maven強制要求的。——摘自官方對座標的介紹

下面藉助一個例子來介紹座標中的各個元素:

<groupId>com.mycompany.app</groupId> 

<artifactId>app_moduleName</artifactId> 

<packaging>jar</packaging> 

<version>0.0.1-SNAPSHOT</version> 

groupId :定義當前Maven專案隸屬的實際專案

artifactId : 定義當前實際專案中的一個Maven專案(模組)

version : 該元素定義Maven專案當前的版本

packaging :定義Maven專案打包的方式(不定義時,預設為:jar),也可以打包成war,ear等

classifier: 該元素用來幫助定義構建輸出的一些附件(如:javadoc、sources等),注意,不能直接定義專案的classfier,因為附屬構件不是專案直接預設生成的,而是由附加的外掛(常用Maven Assembly Plugin)幫助完成。

座標最佳實踐(案例的詳細解析)

groupId的值一般為:com.company.projectName

artifactId的值一般為:projectName_moduleName

version的值一般為:<主版本>.<次版本>.<增量版本>-<限定符>,其中主版本主要表示大型架構變更,次版本主要表示特性的增加,增量版本主要服務於bug修復,而限定符如snapshot、alpha、beta等等是用來表示里程碑。


C、依賴

依賴顧名思義,就是這個專案對其他構建或工程的依賴,配置了依賴就相當於將相應的jar包放到了lib目錄下(當然這是狹義的理解)。

<dependencies>

    <dependency>

       <groupId>junit</groupId>

       <artifactId>junit</artifactId>

       <version>4.8.2</version>

       <scope>test</scope>

    </dependency>

</dependencies>

根元素project下的dependencies可以包含也或多個denpendency元素,用來宣告一個或者多個依賴,每個依賴可以包含的元素有(官方對依賴的介紹):

groupId、artifactId、version:依賴的基本座標,對於任何一個依賴來說,基本座標是最重要的,Maven根據座標才能找到依賴。

type:依賴的型別,對於專案座標定義的packaging。大部分情況下,該元素不必宣告,預設為jar。

scope:依賴範圍: compile、test、provided、runtime、system

optional:標記依賴是否可選 true|fals

exclusions:用來排除傳遞性依賴,大部分依賴宣告只包含基本座標,然而在一些特殊的情況下,其他元素至關重要。

D、倉庫

Maven倉庫是用來幫助我們儲存和管理公共構件(主要是jar包)的地方。在Maven世界中,任何一個依賴、外掛或者專案構建的輸出,都可以成為構件。

實際上Maven專案不會各自儲存其依賴檔案,它們只需要宣告這些依賴的座標,在需要的時候(例如:編譯專案的時候需要將依賴加入到classpath中),Maven會自動根據座標找到倉庫中的構件,並使用它們。

為了實現重用,專案構建完畢後生成的構件也可以安裝或者部署到倉庫中,供其他專案使用。執行Maven的時候,Maven所需要的任何構件都是直接從本地倉庫獲取的。如果本地倉庫沒有,它會首先嚐試從遠端倉庫下載構件至本地倉庫,然後再使用本地倉庫的構件。

本地倉庫:

Maven安裝完成後,會在本地建立一個repository目錄,這個目錄即為本地倉庫。本地倉庫的預設路徑為:${user.home}/.m2/repository/,也可以自定義本地倉庫的位置,修改${user.home}/.m2/settings.xml:

<settings>

  ...

 <localRepository>E:\java\repository</localRepository>

  ...

</settings>

在執行mvn install命令時,Maven會將專案生成的構建安裝到本地倉庫,供本地其他構建使用。在執行mvn deploy命令時,Maven會將專案生成的構建釋出到遠端倉庫,供所有能訪問該倉庫的使用者使用。

遠端倉庫:

原始的Maven安裝自帶了一個遠端倉庫——Maven中央倉庫,中央倉庫的id為central,遠端url地址為http://repo1.maven.org/maven2,它關閉了snapshot版本構件下載的支援。

特殊的遠端倉庫--Maven私服:

通過建立私服,可以降低中央倉庫負荷、節省外網頻寬、加速Maven構建、自己部署構件等,從而高效地使用Maven。


E、生命週期和外掛:

Maven對構建(build)的過程進行了抽象和定義,這個過程被稱為構建的生命週期(lifecycle),Maven的生命週期是抽象的,這意味著宣告週期本身不做任何實際的工作,在Maven的設計中,實際的任務(如編譯原始碼)都交由外掛來完成。

Maven有三套相互獨立的生命週期,而且“相互獨立”,這三套生命週期分別是:

l  Clean Lifecycle        在進行真正的構建之前進行一些清理工作。

l  Default Lifecycle     構建的核心部分,編譯,測試,打包,部署等等。

l  Site Lifecycle            生成專案報告,站點,釋出站點。


生命週期細讀參考網址(僅供參考):

而每套生命週期都是一組階段(Phase)組成,各套Lifecycle 的Phase如下:

l  Clean Lifecycle

pre-clean 執行一些需要在clean之前完成的工作;

clean 移除所有上一次構建生成的檔案;

post-clean 執行一些需要在clean之後立刻完成的工作;

l  Site Lifecycle

pre-site 執行一些需要在生成站點文件之前完成的工作;

site 生成專案的站點文件;

post-site 執行一些需要在生成站點文件之後完成的工作,並且為部署做準備;

site-deploy 將生成的站點文件部署到特定的伺服器上;

l  Default Lifecycle

validate

initialize

generate-sources

process-sources

generate-resources

process-resources 複製並處理資原始檔,至目標目錄,準備打包;

compile 編譯專案的原始碼;

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources 複製並處理資原始檔,至目標測試目錄;

test-compile 編譯測試原始碼;

process-test-classes

test 使用合適的單元測試框架執行測試。這些測試程式碼不會被打包或部署;

prepare-package

package 接受編譯好的程式碼,打包成可釋出的格式,如 JAR ;

pre-integration-test

integration-test

post-integration-test

verify

install 將包安裝至本地倉庫,以讓其它專案依賴;                                                                             

deploy 將最終的包複製到遠端的倉庫,以讓其它開發人員與專案共享;

這些階段(Phase)是有順序的,並且後面的階段依賴於前面的階段,使用者和Maven最直接的互動方式就是這些生命週期階段(egmvn clean install)。


F、聚合與繼承

簡單的解釋:

n  聚合:一個pom包含多個pom

n  繼承:一個pom中的內容被多個pom使用,與Java中的繼承類似

G、約定優於配置

約定優於配置的實現是通過超級POM實現的,所有的pom檔案都繼承自超級POM,在超級POM中定義很多約定。

Maven提倡使用一個共同的標準目錄結構,使開發人員能在熟悉了一個Maven工程後,對其他的Maven工程也能清晰瞭解。這樣做也省去了很多設定的麻煩。

Maven標準工程的根目錄下就只有src和target兩個目錄,各檔案及目錄的定義如下:


詳細引數解析:

src                      存放專案的原始檔                          

 -main                  存放主程式碼                              

     –bin             指令碼庫                                 

     –java            java原始碼檔案                          

     –resources        資源庫,會自動複製到classes目錄裡               

     –filters              資源過濾檔案                             

     –assembly        元件的描述配置(如何打包)                      

     –config           配置檔案                                

     –webapp        web應用的目錄,WEB-INF、css、js等           

 -test                             存放測試程式碼                             

     –java            單元測試java原始碼檔案                      

     –resources        測試需要用的資源庫                          

     –filters             測試資源過濾庫                            

 -site                    Site(一些文件)                         

target                             存放專案構建後的檔案和目錄,jar包、war包、編譯的class檔案等

LICENSE.txt                工程的license檔案                       

README.txt                        工程的readme檔案                        

第三部分:Maven相關環境的配置和部署

1、下載安裝maven 
         到http://maven.apache.org下載一個最新版的,我用的是3.1.1版本,解壓後即可,如果需要在命令列執行,還需要設定一些環境變數,環境可以這麼配置比如說你的maven目錄在H:\apache-maven-3.1.1,那麼你的系統環境變數需要這麼來配置,類似於java的環境變數,配置MAVEN_HOME即為H:\apache-maven-3.1.1,然後配置PATH,為%MAVEN_HOME%\bin,安裝成功後當你在命令列下執行mvn -version後能正確顯示當前maven的版本就說明你的maven安裝成功了。 

出現如下錯誤資訊:

Error occurred during initialization of VM

java/lang/NoClassDefFoundError:java/lang/Object


解決方案:(請檢視如下Blog)

2、建立maven專案 
    首先直接來給大家建立一個maven專案,之後再來細講。首先進入某個盤比如說d:,建立專案mvn archetype:create -DgroupId=com.travelsky.app-DartifactId=travelsky -DarchetypeArtifactId=maven-archetype-webapp 
然後cmd進入剛建好的專案資料夾執行命令mvn package 然後再執行mvn eclipse:eclipse執行完畢之後用eclipse把該專案匯入即可。 

用命令建立Maven專案,命令詳解:

 

mvnarchetype:generate -DarchetypeGroupId=org.apache.maven.archetypes-DgroupId=org.conan.myhadoop.mr -DartifactId=myHadoop-DpackageName=org.conan.myhadoop.mr -Dversion=1.0-SNAPSHOT-DinteractiveMode=false

進入專案,執行mvn命令

D:\workspace\java>cd myHadoop

D:\workspace\java\myHadoop>mvn cleaninstall

匯入專案到eclipse(如上面的右圖所示)

我們建立好了一個基本的maven專案,然後匯入到eclipse中。 這裡我們最好已安裝好了Maven的外掛。

增加元件依賴,如下圖所示:

這裡我使用hadoop-1.2.1版本,修改檔案:pom.xml

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-core</artifactId>

<version>1.0.3</version>

</dependency>

如果我們要增加Spark的依賴,進行如下操作(按上面的格式<紅顏色的字型>進行書寫)

groupId: org.apache.spark

artifactId:spark-core_2.10                                                                                                                                     

version: 1.2.0

如果我們要增加strom的依賴,進行如下操作(按上面的格式<紅顏色的字型>進行書寫)

artifactId: storm-core

version: 0.9.3

下載依賴:

mvn clean install

maven命令大全
    validate,                      驗證工程是否正確,所有需要的資源是否可用。 
    compile,                      編譯專案的原始碼。 
    test-compile,             編譯專案測試程式碼。 
    test,                             使用已編譯的測試程式碼,測試已編譯的原始碼。 
    package,                     已釋出的格式,如jar,將已編譯的原始碼打包。 
    integration-test,       在整合測試可以執行的環境中處理和釋出包。 
    verify,                          執行任何檢查,驗證包是否有效且達到質量標準。 
    install,                         把包安裝在本地的repository中,可以被其他工程作為依賴來使用 
    deploy,                        在整合或者釋出環境下執行,將最終版本的包拷貝到遠端的

                                               repository,使得其他的開發者或者工程可以共享。 
    generate-sources,   產生應用需要的任何額外的原始碼,如xdoclet。 

第三部分:pom.xml檔案詳解

1、理解並修改pom.xml檔案,配置該檔案並自動新增所需要的依賴包。 

          POM,即Project ObjectModel,通過pom.xml檔案配置Maven2,然後Maven2根據此配置執行。作用類似ant的build.xml檔案,功能更強大。該檔案用於管理:原始碼、配置檔案、開發者的資訊和角色、問題追蹤系統、組織資訊、專案授權、專案的url、專案的依賴關係等等。


為了更好地理解mvn命令引數和pom.xml檔案的基本內容,詳細解析如下:

maven 相關:
pom定義了最小的maven2元素,允許groupId,artifactId,version。所有需要的元素 
• groupId:專案或者組織的唯一標誌,並且配置時生成的路徑也是由此生成,如org.codehaus.mojo生成的相對路徑為:/org/codehaus/mojo 
• artifactId: 專案的通用名稱 
• version:專案的版本 
• packaging: 打包的機制,如pom, jar, maven-plugin, ejb, war, ear, rar, par 
• classifier: 分類 

範例:


POM關係: 
主要為依賴,繼承,合成 
  依賴關係: 
  <dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.0</version> 
      <type>jar</type> 
      <scope>test</scope> 
      <optional>true</optional> 
    </dependency> 
    ... 
  </dependencies> 
• groupId, artifactId, version:描述了依賴的專案唯一標誌,可以通過以下方式進行安裝: 
•   使用以下的命令安裝: 
•   mvn install:install-file –Dfile=non-maven-proj.jar–DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1 
•   建立自己的庫,並配置,使用deploy:deploy-file 
•   設定此依賴範圍為system,定義一個系統路徑。不提倡。 
•  type:相應的依賴產品包形式,如jar,war 
•  scope:用於限制相應的依賴範圍,包括以下的幾種變數: 
•   compile :預設範圍,用於編譯 
•   provided:類似於編譯,但支援你期待jdk或者容器提供,類似於classpath 
•   runtime:在執行時,需要使用 
•   test:用於test任務時使用 
•   system:需要外在提供相應得元素。通過systemPath來取得 
•  systemPath: 僅用於範圍為system。提供相應的路徑 
•  optional: 標註可選,當專案自身也是依賴時。用於連續依賴時使用 

獨佔性
     外在告訴maven你只包括指定的專案,不包括相關的依賴。此因素主要用於解決版本衝突問題 
  <dependencies> 
    <dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-embedder</artifactId> 
      <version>2.0</version> 
      <exclusions> 
        <exclusion> 
         <groupId>org.apache.maven</groupId> 
         <artifactId>maven-core</artifactId> 
        </exclusion> 
      </exclusions> 
    </dependency> 
表示專案maven-embedder需要專案maven-core,但我們不想引用maven-core 

繼承關係
    另一個強大的變化,maven帶來的是專案繼承。主要的設定: 
定義父專案 
<project> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>my-parent</artifactId> 
  <version>2.0</version> 
  <packaging>pom</packaging> 
</project> 
    packaging 型別,需要pom用於parent和合成多個專案。我們需要增加相應的值給父pom,用於子專案繼承。主要的元素如下: 
• 依賴型 
• 開發者和合作者 
• 外掛列表 
• 報表列表 
• 外掛執行使用相應的匹配ids 
• 外掛配置 
• 子專案配置 
<project> 
  <modelVersion>4.0.0</modelVersion> 
  <parent> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>my-parent</artifactId> 
    <version>2.0</version> 
    <relativePath>../my-parent</relativePath> 
  </parent> 
  <artifactId>my-project</artifactId> 
</project> 
relativePath可以不需要,但是用於指明parent的目錄,用於快速查詢。 
dependencyManagement: 
用於父專案配置共同的依賴關係,主要配置依賴包相同因素,如版本,scope。 

合成(或者多個模組)
      一個專案有多個模組,也叫做多重模組,或者合成專案。 如下的定義: 
<project> 
  <modelVersion>4.0.0</modelVersion> 
  <groupId>org.codehaus.mojo</groupId> 
  <artifactId>my-parent</artifactId> 
  <version>2.0</version> 
  <modules> 
    <module>my-project1<module> 
    <module>my-project2<module> 
  </modules> 
</project> 

build 設定
    主要用於編譯設定,包括兩個主要的元素,build和report 
build 
    主要分為兩部分,基本元素和擴充套件元素集合 
注意:包括專案build和profile build 
<project> 
  <!-- "Project Build" contains more elements than just the BaseBuildset --> 
  <build>...</build> 
  <profiles> 
    <profile> 
      <!-- "Profile Build" contains asubset of "Project Build"s elements --> 
      <build>...</build> 
    </profile> 
  </profiles> 
</project> 

基本元素 
<build> 
  <defaultGoal>install</defaultGoal> 
  <directory>${basedir}/target</directory> 
  <finalName>${artifactId}-${version}</finalName> 
  <filters> 
   <filter>filters/filter1.properties</filter> 
  </filters> 
  ... 
</build> 
• defaultGoal:       定義預設的目標或者階段。如install 
• directory:            編譯輸出的目錄 
• finalName:          生成最後的檔案的樣式 
• filter:                             定義過濾,用於替換相應的屬性檔案,使用maven定義的屬性。設定所

有placehold的值 

資源(resources) 
     你專案中需要指定的資源。如spring配置檔案,log4j.properties 
<project> 
  <build> 
    ... 
    <resources> 
      <resource> 
        <targetPath>META-INF/plexus</targetPath> 
       <filtering>false</filtering> 
       <directory>${basedir}/src/main/plexus</directory> 
        <includes> 
         <include>configuration.xml</include> 
        </includes> 
        <excludes> 
         <exclude>**/*.properties</exclude> 
        </excludes> 
      </resource> 
    </resources> 
    <testResources> 
      ... 
    </testResources> 
    ... 
  </build> 
</project> 
• resources: resource的列表,用於包括所有的資源 
• targetPath: 指定目標路徑,用於放置資源,用於build 
• filtering: 是否替換資源中的屬性placehold 
• directory: 資源所在的位置 
• includes: 樣式,包括那些資源 
• excludes: 排除的資源 
• testResources: 測試資源列表 


外掛
    在build時,執行的外掛,比較有用的部分,如使用jdk 5.0編譯等等 
<project> 
  <build> 
    ... 
    <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.0</version> 
       <extensions>false</extensions> 
       <inherited>true</inherited> 
        <configuration> 
         <classifier>test</classifier> 
        </configuration> 
       <dependencies>...</dependencies> 
       <executions>...</executions> 
      </plugin> 
    </plugins> 
  </build> 
</project> 
• extensions: true or false,是否裝載外掛擴充套件。預設false 
• inherited: true or false,是否此外掛配置將會應用於poms,那些繼承於此的專案 
• configuration: 指定外掛配置 
• dependencies: 外掛需要依賴的包 
• executions: 用於配置execution目標,一個外掛可以有多個目標。 
如下: 
    <plugin> 
       <artifactId>maven-antrun-plugin</artifactId> 

        <executions> 
          <execution> 
           <id>echodir</id> 
           <goals> 
             <goal>run</goal> 
           </goals> 
           <phase>verify</phase> 
           <inherited>false</inherited> 
           <configuration> 
             <tasks> 
               <echo>Build Dir: ${project.build.directory}</echo> 
             </tasks> 
           </configuration> 
          </execution> 
        </executions> 
      </plugin> 
  說明: 
• id:規定execution 的唯一標誌 
• goals: 表示目標 
• phase: 表示階段,目標將會在什麼階段執行 
• inherited: 和上面的元素一樣,設定false maven將會拒絕執行繼承給子外掛 
• configuration: 表示此執行的配置屬性 

外掛管理
      pluginManagement:外掛管理以同樣的方式包括外掛元素,用於在特定的專案中配置。所有繼承於此專案的子專案都能使用。主要定義外掛的共同元素 

擴充套件元素集合
主要包括以下的元素: 
Directories 
用於設定各種目錄結構,如下: 
  <build> 
   <sourceDirectory>${basedir}/src/main/java</sourceDirectory> 
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory> 
   <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory> 
   <outputDirectory>${basedir}/target/classes</outputDirectory> 
   <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory> 
    ... 
  </build> 

Extensions 
表示需要擴充套件的外掛,必須包括進相應的build路徑。 
<project> 
  <build> 
    ... 
    <extensions> 
      <extension> 
       <groupId>org.apache.maven.wagon</groupId> 
       <artifactId>wagon-ftp</artifactId> 
        <version>1.0-alpha-3</version> 
      </extension> 
    </extensions> 
    ... 
  </build> 
</project> 

Reporting 
    用於在site階段輸出報表。特定的maven 外掛能輸出相應的定製和配置報表。 
  <reporting> 
    <plugins> 
      <plugin> 
       <outputDirectory>${basedir}/target/site</outputDirectory> 
       <artifactId>maven-project-info-reports-plugin</artifactId> 
        <reportSets> 
         <reportSet></reportSet> 
        </reportSets> 
      </plugin> 
    </plugins> 
  </reporting> 

Report Sets 
    用於配置不同的目標,應用於不同的報表 
<reporting> 
    <plugins> 
      <plugin> 
        ... 
        <reportSets> 
          <reportSet> 
           <id>sunlink</id> 
           <reports> 
             <report>javadoc</report> 
           </reports> 
           <inherited>true</inherited> 
            <configuration> 
             <links> 
               <link>http://java.sun.com/j2se/1.5.0/docs/api/</link> 
             </links> 
           </configuration> 
          </reportSet> 
        </reportSets> 
      </plugin> 
    </plugins> 
  </reporting> 

更多的專案資訊
name:專案除了artifactId外,可以定義多個名稱 
description: 專案描述 
url: 專案url 
inceptionYear:創始年份 

Licenses 
<licenses> 
  <license> 
    <name>Apache 2</name> 
   <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> 
    <distribution>repo</distribution> 
    <comments>A business-friendly OSSlicense</comments> 
  </license> 
</licenses> 

Organization 
配置組織資訊 
  <organization> 
    <name>Codehaus Mojo</name> 
    <url>http://mojo.codehaus.org</url> 
  </organization> 

Developers 
配置開發者資訊 
<developers> 
    <developer> 
      <id>eric</id> 
      <name>Eric</name> 
     <email>[email protected]</email> 
     <url>http://eric.propellors.net</url> 
     <organization>Codehaus</organization> 
     <organizationUrl>http://mojo.codehaus.org</organizationUrl> 
      <roles> 
       <role>architect</role> 
       <role>developer</role> 
      </roles> 
      <timezone>-6</timezone> 
      <properties> 
       <picUrl>http://tinyurl.com/prv4t</picUrl> 
      </properties> 
    </developer> 
  </developers> 

Contributors 
  <contributors> 
    <contributor> 
      <name>Noelle</name> 
     <email>[email protected]</email> 
     <url>http://noellemarie.com</url> 
      <organization>NoelleMarie</organization> 
      <organizationUrl>http://noellemarie.com</organizationUrl> 
      <roles> 
       <role>tester</role> 
      </roles> 
      <timezone>-5</timezone> 
      <properties> 
       <gtalk>[email protected]</gtalk> 
      </properties> 
    </contributor> 
  </contributors> 

環境設定
Issue Management 
    定義相關的bug跟蹤系統,如bugzilla,testtrack,clearQuest等 
  <issueManagement> 
    <system>Bugzilla</system> 
    <url>http://127.0.0.1/bugzilla</url> 
  </issueManagement> 
Continuous Integration Management 
連續整合管理,基於triggers或者timings 
  <ciManagement> 
    <system>continuum</system> 
    <url>http://127.0.0.1:8080/continuum</url> 
    <notifiers> 
      <notifier> 
        <type>mail</type> 
       <sendOnError>true</sendOnError> 
       <sendOnFailure>true</sendOnFailure> 
        <sendOnSuccess>false</sendOnSuccess> 
       <sendOnWarning>false</sendOnWarning> 
       <configuration><address>[email protected]</address></configuration> 
      </notifier> 
    </notifiers> 
  </ciManagement> 

Mailing Lists 
  <mailingLists> 
    <mailingList> 
      <name>User List</name> 
     <subscribe>[email protected]</subscribe> 
     <unsubscribe>[email protected]</unsubscribe> 
      <post>[email protected]</post> 
     <archive>http://127.0.0.1/user/</archive> 
      <otherArchives> 
        <otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive> 
      </otherArchives> 
    </mailingList> 
  </mailingLists> 

SCM 
  軟體配置管理,如cvs 和svn 
  <scm> 
   <connection>scm:svn:http://127.0.0.1/svn/my-project</connection> 
    <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection> 
    <tag>HEAD</tag> 
   <url>http://127.0.0.1/websvn/my-project</url> 
  </scm> 
以上即為pom檔案的具體配置解釋。 

2、maven有他的私服,也就是nexus 作為maven的中央倉庫 
     向maven中匯入非官方的

jar:mvninstall:install-file -Dfile=<path-to-file>-DgroupId=<group-id> 
-DartifactId=<artifact-id> -Dversion=<version>-Dpackaging=<packaging> 
去下載nexus-oss-webapp-1.7.0-bundle.zip,然後解壓縮到任意目錄下(如E:\nexus) 
下載地址:http://nexus.sonatype.org/downloads/ 
如果作業系統是windows-x86-32 則進入目錄 
E:\nexus\nexus-oss-webapp-1.7.0\bin\jsw\windows-x86-32執行nexus.bat在瀏覽器中輸入http://localhost:8081/nexus/index.html 
即可進入登入頁面預設使用者名稱密碼是admin/admin123 
接著說pox.xml檔案 
配置MAVEN使用NEXUS作為映象倉庫,首先找到${home.dir}/.m2/settings.xml 
檔案 如果沒有.m2資料夾的話,說明你沒有執行過MVN,請在命令列中輸入MVN命 
令,首次執行MAVEN後會自動建立.M2資料夾,然後進入MAVEN的安裝路徑下的 
CONF資料夾,把預設settings.xml 拷貝到${home.dir}/.m2下。接著在此檔案中填入以下資訊: 
<?xml version="1.0" encoding="UTF-8"?> 
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
  <mirrors> 
    <mirror> 
      <!--This sends everything else to /public--> 
      <id>nexus</id> 
      <mirrorOf>*</mirrorOf> 
      <url>http:// 主機ip:埠/nexus/content/groups/public</url> 
    </mirror> 
  </mirrors> 
  <profiles> 
    <profile> 
      <id>nexus</id> 
      <!--Enable snapshots for the built in centralrepo to direct --> 
      <!--all requests to nexus via the mirror--> 
      <repositories> 
        <repository> 
         <id>xinxin</id> 
          <url>http://主機ip:埠/nexus/content/groups/public</url> 
         <releases><enabled>true</enabled></releases> 
         <snapshots><enabled>true</enabled></snapshots> 
        </repository> 
      </repositories> 
     <pluginRepositories> 
        <pluginRepository> 
         <id>xinxin</id> 
          <url>http:// 主機ip:埠/nexus/content/groups/public</url> 
         <releases><enabled>true</enabled></releases> 
         <snapshots><enabled>true</enabled></snapshots> 
        </pluginRepository> 
      </pluginRepositories> 
    </profile> 
  </profiles> 
  
  <activeProfiles> 
    <!--make the profile active all the time --> 
    <activeProfile>nexus</activeProfile> 
  </activeProfiles> 
</settings> 

注意:Nexus預設是關閉遠端索引下載的,主要是擔心會造成對伺服器的巨大負擔。常用的需要開啟的三個倉庫分別是Maven Center,Apache Snapshots,Codehaus Snapshots;具體的開啟方式(以MavenCenter為例): 
左側視窗點選Repositories,右側會將所有倉庫資訊顯示出來,選中代理倉庫Maven Center,更改Configuration->Download Remote Indexes為true,儲存配置後,右擊代理倉庫MavenCenter然後選擇ReIndex,如此即可觸發Nexus下載遠端的索引檔案。 

3、Nexus中配置自己的資料倉庫,及倉庫管理 新增一個新的倉庫(以新增host倉庫為例) 
    首先以管理員身份登入Nexus,左邊導航欄Views/repositories點選Repositories,這樣會在右邊新視窗列出所有的已知倉庫。 
    然後點選新視窗左上角的Add按鈕,下拉選項中我們選在HostRepositories,這樣就打開了一個新增Host資料倉庫頁面,接下來要做的就是根據自己的需要按照提示填寫配置資訊,填寫完成記得點選save按鈕儲存。 
     預設的Local StorageLocation會儲存在Nexus安裝主目錄下的\sonatype-work\nexus\storage路徑下,如果需要改動,在OverriddingLocal Storage Location項輸入相應的路徑即可。因為我們maven中配置的公共倉庫組是在public Repostitories組中,所以我們需要把新建的倉庫新增至public Repostitories.具體操做如下: 
      在倉庫列表中選中publicRepostitories,Configuration –>Available Repositories下將新建倉庫(我們這裡的新建倉庫名為test)拖拽至Ordered Group Repositories,點選save按鈕儲存配置。 
    這部操作的時候你可能會疑惑為什麼看不到我剛新增的倉庫呢,那是因為nexus沒重新整理,你可以點選重新整理按鈕重新整理下就可以添加了。 

給自己的倉庫裡面上傳自己本地的jar包: 
      選中倉庫,選擇ArtifactUpload。Artifact Upload下一共有兩個模組:select GAV Defination source 和 select Artifact(s)for Upload,我們首先在select Artifact(s) for Upload 模組下點選selectArtifact(s) for upload按鈕上傳構件,然後在select GAV Defination source模組填寫相關構件配置引數Classifier是用來區分同一版本號的不同版本,如poi-3.0-FINAL.jar,FINAL就是它的Classifier.另外Nexus對構件命名校驗很嚴格,一般規則是“構建名+版本號[+Classifier].構建型別” ,上傳時的相關引數填寫和Maven的pom.xml配置依賴稍微不匹配就可能導致取不到構件。這點一定要注意。 
      完成儲存之後,一定要記得重建索引不然是不會被發現的。 

相關推薦

如何使用Maveneclipse構建資料開發框架專案

作為大資料開發者,特別是開發大資料應用程式的程式設計師或者框架師,在進行大資料專案開發,或者是研讀原始碼,的把相應的專案匯入到整合開發環境,本文用Maven和eclipse來構建大資料開發框架專案。比如說開發storm專案、Hadoop專案、Spark專案等,本文以構建st

資料開發神器——Scrapy Spider框架

說道Python,估計很多同學跟我一樣都是從學習Python的爬蟲開始的。當然你可以使用lxml、BeautifulSoup、Request等第三方庫來編寫自己的爬蟲。但是當需要爬取海量資料,特別是大資料的實際應用中,若自己編寫爬蟲,是一件特別困難的事情。還好Python提供了類似Scrapy等類似

資料開發資料相關的技術

  在現如今,隨著網際網路技術飛速的發展,目前有不少朋友詢問關於大資料方面的問題,比如什麼是大資料開發啊,和大資料相關的技術是什麼呢等問題,我們今天就淺談一下大資料開發及和大資料相關的技術的問題。        首先,大資料(big data),指無法在一定時間範圍內用常規軟體工具進

資料計算框架Hadoop, SparkMPI

轉自:https://www.cnblogs.com/reed/p/7730338.html   今天做題,其中一道是 請簡要描述一下Hadoop, Spark, MPI三種計算框架的特點以及分別適用於什麼樣的場景。 一直想對這些大資料計算框架總結一下,只可惜太懶,一直拖著。今

資料開發之Hadoop篇----配置yarnmapreduce

上一篇部落格中我們已經完成了hdfs的部署,現在我們開始部署yarn了。 我們先使用jps命令來檢視下現在與java相關的程序: 這裡NameNode以後簡稱為NN,DataNode簡稱為DN,而SecondaryNameNodel簡稱為SNN。 我們先切換到had

資料開發之Hive篇----分割槽表的構建

在hive當中為什麼要分割槽呢?就是要提高我們的查詢速度,那麼它是怎麼提高查詢速度的呢?首先,分割槽是指根據某個或幾個欄位來將資料表格切分成多個板塊,根據你所指定的欄位,這個欄位裡面有多少個值,我們就將分割槽建成多少個。所以,分割槽其實是在表這個單位下的下一個單位。因此,在H

資料開發面試:Impalahive的比較(最全版)

Impala和hive的比較 Impala是Cloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢儲存在Hadoop的HDFS和HBase中的PB級大資料。已有的Hive系統雖然也提供了SQL語義,但由於Hive底層執行使用的是MapReduce引擎,仍然是一

資料開發:實時資料平臺流計算

大資料開發     1、實時資料平臺整體架構          實時資料平臺的支撐技術主要包含四個方面:實時資料採集(如Flume),訊息中介軟體(如Kafka), 流計算框架(如Storm, Spark, Flink和Beam),以及資料實時儲存(如列

淺談資料開發資料相關的技術

在現如今,隨著網際網路技術飛速的發展,目前有不少朋友詢問關於大資料方面的問題,比如什麼是大資料開發啊,和大資料相關的技術是什麼呢等問題,我們今天就淺談一下大資料開發及和大資料相關的技術的問題。 首先,大資料(big data),指無法在一定時間範圍內用常規軟體工具進行捕捉、管理和處理的資料集合,是需

MavenEclipse整合構建多模組Maven專案

最近在工作中越來越經常的用到了Maven作為專案管理和Jar包管理和構建的工具,感覺Maven的確是很好用的。而且要將Maven的功能最大發揮出來,多模組是一個很好的整合例子。 一個Maven專案包括一個MavenProject和多個MavenModule 下面用一個

離線實時資料開發實戰

離線和實時大資料開發實戰 目 錄 前言 第一篇 資料大圖和資料平臺大圖 第1章 資料大圖 2 1.1 資料流程 2 1.1.1 資料產生 3 1.1.2 資料採集和傳輸 5 1.1.3 資料儲存處理 6 1.1.4 資料應用 7 1.2 資料技術 8 1.2.1 資料採集傳輸主要技術 9

資料開發面試部分:Hadoop 中 job task 之間的區別是什麼(資料開發面試)

JobTracker 是一個 master 服務,軟體啟動之後 JobTracker 接收 Job,負責排程 Job的每一個子任務, task 運行於 TaskTracker 上,並監控它們,如果發現有失敗的 task 就重新執行它。一般情況應該把 JobTracker 部署

都昌資訊袁永福:利用電子病歷賦能框架,為健康醫療資料打好基礎【電子病歷健康醫療資料系列】

隨著國家健康醫療大資料政策的推行,電子病歷作為其中的基礎資料庫之一,在醫院的資訊系統中的地位不斷攀升。針對電子病歷在健康醫療大資料的發展問題,動脈網專訪了國內最具代表性的幾家電子病歷企業的專家。 南京都昌資訊科技有限公司是一家新興的技術型軟體開發企業。公司雖然年輕,但成員卻是長期從事於電子病歷行業的專家。團

想成為優秀資料開發工程師必須學習掌握的技能,才能立於不敗

當我們在會談這個問題時,無非就是想尋求一種途徑的演示,可以輔佐對大資料開發工程師成心向的知友創造一些可以自創的經歷。 適值,100offer在前段時辰接觸到Talking Data的研發副總裁閆志濤,並約請他就大資料工程師若何實現手藝成上停止Live分享。閆志濤就他從物

Ajax核心XMLHttpRequest物件、(傳送請求、接收)方法屬性介紹、AJAX開發框架資料格式提要(XML、JSON、HTML)

Ajax核心XMLHttpRequest物件、(傳送請求、接收)方法和屬性介紹、AJAX開發框架、資料格式提要(XML、JSON、HTML) XMLHttpRequest物件    XMLHttpRequest物件在大部分瀏覽器上已經實現而且擁有一個簡單的介面允許資料從客戶端傳遞到服務端,但並不會打斷使用

成為一個合格的資料開發人才需要具備哪些技術經驗?

開發十年,就只剩下這套架構體系了! >>>   

net Mono 構建的HTTP服務框架

ots .config app pac spn 請求方法 park 找不到 get   Nancy是一個基於.net 和Mono 構建的HTTP服務框架,是一個非常輕量級的web框架。    設計用於處理 DELETE, GET, HEAD, OPTIONS, POST,

資料開發學習路線圖

入門知識 推薦書籍 1、舍恩伯格的《大資料時代》; 2、巴拉巴西的《爆發》; 3、塗子沛的《大資料》; 4、吳軍《智慧時代》; 5、《大資料架構商業之路:從業務需求到技術方案》 工具技能 1、hadoop: 常用於離線的複雜的大資料處理 2、Spark:常用於離線

資料開發----Hive(入門篇)

前言 本篇介紹Hive的一些常用知識。要說和網上其他manual的區別,那就是這是筆者寫的一套成體系的文件,不是隨心所欲而作。 本文所用的環境為: CentOS 6.5 64位 Hive 2.1.1 Java 1.8 Hive Arc

資料開發----Fabric(入門篇)

一 前言 本篇介紹Fabric的一些常用知識。要說和網上其他manual的區別,那就是這是筆者寫的一套成體系的文件,不是隨心所欲而作。 二 安裝 Fabric現在支援Python2和Python3,安裝: pip install fabric pip i