maven搭建多模塊項目和管理

在eclipse下構建maven項目,該項目由多個子模塊組成。

1.創建一個父項目

NEW -->project-->maven-->maven Project,點擊下一步,進入new maven Project的Select project name and location界面


,什么也不做,直接下一步到Select an Archetype界面。


在這個界面中選擇maven-Archetype-site-simple,然后選擇下一步,進入選擇Enter a group id for the artifact的界面


,在group id 和artifact id中輸入你的group和artifact名稱。我用的分別是A和B,選擇完成。這時會在eclipse中生成一個項目,項目名是B。

此時B的pom文件如下所示:

[html]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  2. ??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">??
  3. ??<modelVersion>4.0.0</modelVersion>??
  4. ??
  5. ??<groupId>A</groupId>??
  6. ??<artifactId>B</artifactId>??
  7. ??<version>0.0.1-SNAPSHOT</version>??
  8. ??<packaging>pom</packaging>??
  9. ??
  10. ??<distributionManagement>??
  11. ????<site>??
  12. ??????<id>website</id>??
  13. ??????<url>scp://webhost.company.com/www/website</url>??
  14. ????</site>??
  15. ??</distributionManagement>??
  16. ??
  17. ??<properties>??
  18. ????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>??
  19. ??</properties>??
  20. </project>??

2.創建子項目

2.1 將項目B中的src文件刪除(可有可無,主要看個人需要)
2.2 選中項目B,點擊右鍵,選擇NEW -->project-->maven-->maven Module,點擊下一步,在出現的界面中輸入子模塊的名稱C,點擊下一步,出現Select an Archetype界面。這時選擇maven-Archetype-site-quickStart或者maven-Archetype-webapp(構建web層時使用),然后選擇完成,即生成子項目C。

這時B的pom文件就變成了這樣(和上面的比只是多了個modules標簽):

[html]?view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  2. ??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">??
  3. ??<modelVersion>4.0.0</modelVersion>??
  4. ??
  5. ??<groupId>A</groupId>??
  6. ??<artifactId>B</artifactId>??
  7. ??<version>0.0.1-SNAPSHOT</version>??
  8. ??<packaging>pom</packaging>??
  9. ??
  10. ??<distributionManagement>??
  11. ????<site>??
  12. ??????<id>website</id>??
  13. ??????<url>scp://webhost.company.com/www/website</url>??
  14. ????</site>??
  15. ??</distributionManagement>??
  16. ??
  17. ??<properties>??
  18. ????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>??
  19. ??</properties>??
  20. ??<modules>??
  21. ????<module>C</module>??
  22. ??</modules>??
  23. </project>??

這時構建B的子項目完成,構建其他的子項目和此類似。

在構建第二個子項目D時可能在B中沒有及時出現,這時只要把B項目刷新下就可以了。

ps:

其實在構建多模塊的項目時,在選擇父項目的類型時是可以選擇任意的類型。選擇項目類型的界面如下:

對于這些非常規類型的項目,如果想要成為父項目,需要做如下一些改動:

1.將pom.xml文件中的<packaging>jar</packaging>改為<packaging>pom</packaging>,若不換為pom則在打包的時候父項目會產生一個target文件;如果沒有<packaging>pom</packaging>的可以在<version>0.0.1-SNAPSHOT</version>后面添加上這句話即可。

2.刪除除pom.xml外的所有文件,其中JRE System Library是不能直接刪除的,需要選擇中,并單擊右鍵Bulid Path-->Remove from bilud path即可移除。

這時的父項目就顯得很干凈整潔了。


其實在普通的項目上是不允許構建子模塊的,能否在一個項目下創建子模塊,主要取決于是否有<packaging>pom</packaging>這個配置。如果有這個配置則任何項目都可以創建子模塊,硬要這樣創建的話整個項目會變的不倫不類。看來maven在判斷一個項目是否可以創建子模塊其實是取決于這個配置的。





參考二:

首先,前面幾次學習已經學會了安裝maven,如何創建maven項目等,最近的學習,終于有點進展了,搭建一下企業級多模塊項目。

好了,廢話不多說,具體如下:

首先新建一個maven項目,pom.xml的文件如下:

搭建多模塊項目,必須要有一個packaging為pom的根目錄。創建好這個maven項目后,我們對著項目右鍵-->new

輸入你的項目名稱

這里就不重復說創建項目了,創建好的目錄結構在eclipse中如下:

說明一下這些項目具體都是干嘛的:

easyframework-model:數據模型,與數據庫表字段對應的實體類

easyframework-core:核心業務項目。主要是Service處理業務邏輯

easyframework-persist:數據持久層,操作低層數據庫。

easyframework-utils:工具類,所有工具類都提取出來寫在這個項目中。

easyframework-web :這個就是整個項目的web層了,頁面的顯示以及控制層

備注:創建這些項目的時候,只有easyframework-web是web項目即maven的:maven-archetype-webapp,其他的都是java項目:maven-archetype-quicktart

打開easyframework-root的pom.xml文件,你會看到模塊化是這樣的:

接下來是配置各個模塊的依賴關系,我個人認為的項目是這樣依賴的,不知道對不對,呵呵....

舉個例子easyframework-web這個項目依賴easyframework-core(業務核心)和easyframework-model(實體類),easyframework-utils(公共的工具類)這個三個模塊。

那么在怎么在easyframework-web的pom.xml中體現呢,具體如下:

?

打開項目的maven依賴你會發現,已經依賴了這三個項目

但是你應該會感覺到奇怪,為什么會有那么jar包,明明只引用了這三個項目,哪來的那么多jar包。

你會發現,我再pom.xml文件中,有個parent節點,繼承了根節點的pom,這就是maven的項目繼承依賴,會從父POM中繼承一些值。這對構建一個大型的系統來說很有必要

這樣的話你就不需要一遍又一遍的重復添加同樣的依賴元素,當然,如果你在子項目中也有同樣的依賴,則會覆蓋父POM中的值。

父POM的的依賴如下:

復制代碼
  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3     <modelVersion>4.0.0</modelVersion>
  4     <groupId>com.easyframework</groupId>
  5     <artifactId>easyframework-root</artifactId>
  6     <packaging>pom</packaging>
  7     <version>1.0</version>
  8     <name>easyframework-root</name>
  9     <url>http://maven.apache.org</url>
 10     <modules>
 11         <module>easyframework-web</module>
 12         <module>easyframework-persist</module>
 13         <module>easyframework-core</module>
 14         <module>easyframework-utils</module>
 15         <module>easyframework-model</module>
 16     </modules>
 17     <properties>
 18         <!--指定Maven用什么編碼來讀取源碼及文檔 -->
 19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 20         <!--指定Maven用什么編碼來呈現站點的HTML文件 -->
 21         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 22         <mysql.version>5.1.25</mysql.version>
 23         <hibernate.version>4.2.2.Final</hibernate.version>
 24         <spring.version>3.2.3.RELEASE</spring.version>
 25         <aspectj.version>1.7.2</aspectj.version>
 26     </properties>
 27     <repositories>
 28         <repository>
 29             <id>springsource-repo</id>
 30             <name>SpringSource Repository</name>
 31             <url>http://repo.springsource.org/release</url>
 32         </repository>
 33     </repositories>
 34     <dependencies>
 35     
 36         <!-- log4j -->
 37         <dependency>
 38             <groupId>log4j</groupId>
 39             <artifactId>log4j</artifactId>
 40             <version>1.2.17</version>
 41         </dependency>
 42         <!-- junit -->
 43         <dependency>
 44             <groupId>junit</groupId>
 45             <artifactId>junit</artifactId>
 46             <version>4.11</version>
 47             <scope>test</scope>
 48         </dependency>
 49         <!-- mysql數據庫驅動 -->
 50         <dependency>
 51             <groupId>mysql</groupId>
 52             <artifactId>mysql-connector-java</artifactId>
 53             <version>${mysql.version}</version>
 54         </dependency>
 55         <!-- hibernate4 -->
 56         <dependency>
 57             <groupId>org.hibernate</groupId>
 58             <artifactId>hibernate-core</artifactId>
 59             <version>${hibernate.version}</version>
 60         </dependency>
 61         <!-- aspectjweaver -->
 62         <dependency>
 63             <groupId>org.aspectj</groupId>
 64             <artifactId>aspectjweaver</artifactId>
 65             <version>${aspectj.version}</version>
 66         </dependency>
 67         <!-- spring3 -->
 68         <dependency>
 69             <groupId>org.springframework</groupId>
 70             <artifactId>spring-core</artifactId>
 71             <version>${spring.version}</version>
 72         </dependency>
 73         <dependency>
 74             <groupId>org.springframework</groupId>
 75             <artifactId>spring-context</artifactId>
 76             <version>${spring.version}</version>
 77         </dependency>
 78         <dependency>
 79             <groupId>org.springframework</groupId>
 80             <artifactId>spring-jdbc</artifactId>
 81             <version>${spring.version}</version>
 82         </dependency>
 83         <dependency>
 84             <groupId>org.springframework</groupId>
 85             <artifactId>spring-beans</artifactId>
 86             <version>${spring.version}</version>
 87         </dependency>
 88         <dependency>
 89             <groupId>org.springframework</groupId>
 90             <artifactId>spring-web</artifactId>
 91             <version>${spring.version}</version>
 92         </dependency>
 93         <dependency>
 94             <groupId>org.springframework</groupId>
 95             <artifactId>spring-expression</artifactId>
 96             <version>${spring.version}</version>
 97         </dependency>
 98         <dependency>
 99             <groupId>org.springframework</groupId>
100             <artifactId>spring-orm</artifactId>
101             <version>${spring.version}</version>
102         </dependency>
103     </dependencies>
104     <build>
105         <finalName>easyframework-root</finalName>
106         <plugins>
107             <plugin>
108                 <artifactId>maven-compiler-plugin</artifactId>
109                 <configuration>
110                     <source>1.6</source>
111                     <target>1.6</target>
112                 </configuration>
113             </plugin>
114         </plugins>
115     </build>
116 </project>
復制代碼

當然這個父POM只是一個例子,你可以根據自己的配置添加相關的依賴,這里給一個我認為是最好用的倉庫:

http://mvnrepository.com/?相信地球人都知道這個!哈哈.....

到此就搭建好了企業級多模塊的項目環境了。


轉載于:https://www.cnblogs.com/kool/p/6695740.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259223.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259223.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259223.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shsh驗證服務器,教你從Cydia上取出SHSH并驗證有效性!

原標題&#xff1a;教你從Cydia上取出SHSH并驗證有效性&#xff01;今天在第一篇內容中和大家說了如何讓32位設備進行降級&#xff0c;但這其中有個很重要的問題就是如何提取出對應設備的SHSH&#xff0c;雖然說本篇內容并不是對所有人都有效&#xff0c;但至少多了一個可選擇的…

Discuz!$_G變量的使用方法

1&#xff0c;G變量的使用方法&#xff1a;例如&#xff1a;$_G[style][boardlogo]風格變量篇$_G[style] > Array(官方模板區 cr180整理$_G[style][styleid] > 當前風格ID$_G[style][name] > 當前風格名$_G[style][templateid] > 當前模板體系$_G[style][tpldir] &…

n!后面有多少個0(轉載)

我的思路&#xff1a; 從”那些數相乘可以得到10”這個角度&#xff0c;問題就變得比較的簡單了。 首先考慮&#xff0c;如果N的階乘為K和10的M次方的乘積&#xff08;N&#xff01;K?10M&#xff09;&#xff0c;那么N!末尾就有M個0。 如果將N的階乘分解后&#xff0c;那么…

ico的尺寸_批量壓縮、加水印、調整尺寸……用這 6 款 Mac 圖片工具一鍵解決

不論是寫文章、做教程&#xff0c;還是處理攝影作品、上傳社交平臺&#xff0c;對圖片的處理肯定少不了。龐大又貴重的專業軟件不僅成本較高&#xff0c;還有著不小的上手難度。如果我們僅僅是想要&#xff1a;縮小圖片體積、添加水印或者批量對圖片進行操作等等&#xff0c;使…

轉:MAC 下安裝PHONEGAP開發環境

MAC 下安裝PHONEGAP開發環境 什么是Phonegap呢&#xff1f;Phonegap是一個利用HTML5去開發App的框架。可以為安卓、iOS、WP、黑莓、火狐等移動操作系統。采用HTML5來編寫交互界面。其優點是編寫一次可以編譯到各種移動平臺上&#xff0c;大大為公司節省了開發周期。但是它也是有…

Sql 行轉列問題總結

1、行轉列---1、最簡單的行轉列 /* 問題&#xff1a;假設有張學生成績表(tb)如下: 姓名 課程 分數 張三 語文 74 張三 數學 83 張三 物理 93 李四 語文 74 李四 數學 84 李四 物理 94想變成(得到如下結果)&#xff1a; 姓名 語文 數學 物理 李四 74 84 94 張三 74 8…

尋找第K大的數字

尋找第k大的數字&#xff0c;有很多方法&#xff0c;最基本的就是將數組按照從大到小的順序排列&#xff0c;找出第k個元素即可。但是這種方法的時間復雜度為o(nlog(n)),我們還能找到更好地方法。下面我們將介紹另外兩種辦法&#xff0c;一種是基于快排Partition的方法&#xf…

(12)MSP430F5529 常用內置函數和一些說明

&#xff08;1&#xff09; MSP430F5529支持最高工作頻率為25MHZ&#xff0c;也就是說你通過 鎖相環倍頻來提高系統運行速度是有一個限制的&#xff0c; 最高只能到25MHZ&#xff08;再高沒意思了&#xff09;。 &#xff08;2&#xff09;幾個重要的內聯函數 &#xff08;內聯…

從零開始學android編程_android初學者的入門秘籍

大概是去年年底開始接觸android原本是學習嵌入式的我&#xff0c;領導讓我看看能不能搞一下這個android APP。一開始的我懵逼得很。。。這android APP 不是得用java寫嗎&#xff1f;&#xff1f;&#xff1f; 現在我看網上說比較多還是用kotlin&#xff0c;沒去學。。。好家伙&…

修改了sql默認路徑無法登錄服務器,PostgreSQL錯誤'無法連接到服務器:沒有這樣的文件或目錄'...

像其他一些人一樣,當我在我的項目中運行rake db:migrate或者甚至為我的Ruby on Rails 3.2應用程序嘗試大多數數據庫任務時,我收到此錯誤.PGError(無法連接到服務器:沒有這樣的文件或目錄.服務器是否在本地運行并接受Unix域套接字上的連接"/tmp/.s.PGSQL.5432"&#x…

QMarkDowner編譯

第一次完整的編譯一個工程。哈哈 記錄一下 準備環境 我的環境是win7 x64, python2.7.5 x64的。 python 3.x的我沒試過,有需要的朋友可以試一下。 安裝python2.7.5 x64 確保將安裝路徑加入到Path中 PyQt4 啊 我的環境是win的 當然要下win版 (PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x6…

C++ STL的查找算法

假設你有一個序列容器&#xff0c;或者有一對迭代器標識了一個區間,現在你希望在容器中查找一些信息&#xff0c;這樣的查找工作如何進行呢&#xff1f;你的選擇往往是&#xff1a; count,count_if,find,find_if,binary_search,lower_bound,upper_bound,equal_range.該如何選擇…

習題七

umask 022 &#xff0c;請描述該命令的含義創建目錄時默認的權限為&#xff1a;755 rwxr-xr-x創建文件時默認的權限為&#xff1a;644 rw-r--r--note:創建文件的默認權限是拿掉了X 所以最大為666&#xff0c;而目錄最大為777 umask NUM 就是去掉相應的權限轉載于:https://blo…

web中的cookie管理

本篇是以JSP為背景介紹&#xff0c;但是在web開發中也是相同的原理。 什么是cookie 由于http是一種無狀態的協議&#xff0c;因此服務器收到請求后&#xff0c;只會當做一次新的請求。即便你重復發送了1000次同樣的請求&#xff0c;這1000次都屬于獨立的請求。 這樣顯然效率很低…

unity怎么設置游戲頁面_杭州有沒有正規的unity游戲開發培訓機構?

現在Unity游戲開發是個火熱的行業&#xff0c;薪資待遇比較高&#xff0c;未來的發展方向和前景也比較不錯&#xff0c;很多人也都想成為專業Unity游戲開發工程師&#xff0c;學習Unity游戲開發已經成為很多追求更好就業前景的人的選擇。學習專業、系統的Unity游戲開發知識并達…

VC++ 使用attributes定義接口

1.定義預處理命令_ATL_ATTRIBUTES 2.在一個全局的Cpp文件里面配置module的attribute [module(dll, uuid "{3845951F-15B8-4286-8E7D-E9D4F5C7B6CE}", name "TestApp")]3.定義接口 [object,uuid("9F414A8A-1D5E-4aff-A60E-CFD65155ABB6"),dual,…

h3c 虛擬服務器 下一跳,H3CNE 312題和313題 直連路由靜態路由的下一跳問題

321.在MSR 路由器上看到路由表里有如下顯示&#xff1a; Destination/Mask Proto Pre Cost NextHop Interface 127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0 127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0 192.168.96.0/19 Direct 0 0 192.168.120.153 S6/0 那么關于目的地321.在MS…

C++成員變量的初始化順序問題

先來看兩道題&#xff1a; // count algorithm example #include <iostream> // std::cout #include <algorithm> // std::count #include <vector> // std::vector using namespace std; class A { public:A() { cout << "in A()&q…

Knockout.Js案例一Introduction

在這第一個教程中,您將體驗的一些基本知識構建的web UI Model-View-ViewModel使用knockout.js(MVVM)模式。案例1&#xff1a;添加:data-bind <p>First name: <strong data-bind"text:firstName">1</strong></p><p>Last name: <stro…

C#注冊表常用操作

1&#xff1a;加鍵 改值 Microsoft.Win32.RegistryKey Key Microsoft.Win32.Registry.CurrentUser.CreateSubKey( "Software\Microsoft\Internet Explorer\Main"); Key.SetValue( "Window Title" , value ); Key.Close(); …