2010-02-05 68 views
3

我在這裏閱讀了關於以前的maven問題的一些有用的帖子,我目前對學習maven非常感興趣(因爲我喜歡它,因爲我的老闆需要我)。我目前正在閱讀[這本] [1]一書,我正在通過例子工作。它是一本簡單明瞭的書,但其內部存在一些錯誤(瑣碎的),但對於像我這樣的新手來說,很難發現,一旦發現它可以很容易地修復。有沒有其他書更好地理解從上到下的maven?問題的關於maven的問題

第二部分是關於一個例子,這本書,也許一個簡單的解釋就解決了我的懷疑。

這是事情,我做了一個simple-weather項目在Java中檢索從雅虎天氣服務器的天氣條件,給予特定的郵政編碼,它返回天氣信息。

然後我做了一個'simple-webapp'(帶有maven以及上面我忘記提到的那個),這基本上是一個web項目,它有一些默認的servlet已經與maven一起使用,它什麼都不做。我想要將這兩個項目合併爲一個,所以我創建了一個包含2個模塊的pom.xml,其中包含1個用於檢索信息(java項目)和其他信息以將其顯示在Web(Web應用程序)上的信息。

我在結束了一切工作,但這裏是奇怪的事情。如果我做的webapp顯示任何字符串「name」可以說,然後獨立打造它,它不正是打印字符串。但是,當我把webapp放在「父項目」中,並將此字符串更改爲「name1」並將其構建爲一個partent-project子模塊時。沒有任何更改..

因此,我回到了這一點,因爲簡單的webapp是依賴於簡單的天氣我不能再建立它自己,所以現在,如果我想對webapp做一些更改..修改webapp的「父項目」之外建立它然後粘貼它回來到父項目,然後更改將適用,爲什麼是這樣,爲什麼我不能直接更改servlet內容/或在webapp中添加另一個作爲「父項目」的一部分?

謝謝。我知道它長而枯燥的問題,但我只是想學的東西,有沒有更好的地方,要求比這裏:d

編輯 - 下面是POM文件每個項目:

1.簡單母體的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>org.sonatype.mavenbook.multi</groupId> 
    <artifactId>simple-parent</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <name>Multi Chapter Simple Parent Project</name> 
<modules> 
<module>simple-weather</module> 
<module>simple-webapp</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> 

2.簡單全天候的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>org.sonatype.mavenbook.multi</groupId> 
<artifactId>simple-parent</artifactId> 
<version>1.0</version> 
</parent> 
<artifactId>simple-weather</artifactId> 
<packaging>jar</packaging> 
<name>Multi Chapter Simple Weather API</name> 
<build> 
<pluginManagement> 
<plugins> 
<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-surefire-plugin</artifactId> 
<configuration> 
<testFailureIgnore>true</testFailureIgnore> 
</configuration> 
</plugin> 
</plugins> 
</pluginManagement> 
</build> 
<dependencies> 
<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>jaxen</groupId> 
<artifactId>jaxen</artifactId> 
<version>1.1.1</version> 
</dependency> 
<dependency> 
<groupId>velocity</groupId> 
<artifactId>velocity</artifactId> 
<version>1.5</version> 
</dependency> 
<dependency> 
<groupId>org.apache.commons</groupId> 
<artifactId>commons-io</artifactId> 
<version>1.3.2</version> 
<scope>test</scope> 
</dependency> 
</dependencies> 
</project> 

3.簡單的webapp的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>org.sonatype.mavenbook.multi</groupId> 
<artifactId>simple-parent</artifactId> 
<version>1.0</version> 
</parent> 
<artifactId>simple-webapp</artifactId> 
<packaging>war</packaging> 
<name>simple-webapp Maven Webapp</name> 
<dependencies> 
<dependency> 
<groupId>javax.servlet</groupId> 
<artifactId>servlet-api</artifactId> 
<version>2.4</version> 
<scope>provided</scope> 
</dependency> 
<dependency> 
<groupId>org.sonatype.mavenbook.multi</groupId> 
<artifactId>simple-weather</artifactId> 
<version>1.0</version> 
</dependency> 
</dependencies> 
<build> 
<finalName>simple-webapp</finalName> 
<plugins> 
<plugin> 
<groupId>org.mortbay.jetty</groupId> 
<artifactId>maven-jetty-plugin</artifactId> 
</plugin> 
</plugins> 
</build> 
</project> 
+0

請解釋您運行的目標以及從哪裏運行。 – 2010-02-05 16:38:54

+0

我正在運行,maven clean,然後從父pom.xml安裝maven – 2010-02-08 09:36:43

回答

4

我不知道完全明白你的問題。但是,讓我們來解釋一下Maven中的一些原則。

所以,你有這樣的結構:

parent 
    + simple-weather 
    + simple-webapp 

就某個Maven的點,我們有3個項目在這裏:

  • ,這是一個pom項目(即其packaging屬性設置爲pom
  • 簡單天氣,這是一個jar項目,並有父母作爲父母。
  • 簡單的web應用,這是一個war項目,有爲家長和簡單天氣的依賴。

父項目使用兩個概念,Maven的:

  • 繼承,這不能不說所有他的孩子(簡單天氣簡單的web應用)將繼承他所有的屬性(這個概念與Java中的extends幾乎相同)。
  • 聚合,由定義<modules>定義。聚合意味着將在每個module上運行將在該項目上運行的每個命令。

如果我建立(使用mvn clean install)在目錄發生的呢?

  1. Maven將「編譯」 項目,然後安裝在本地存儲庫中的pom.xml。
  2. Maven將編譯簡單天氣項目,但由於它有一個父項,Maven會將父項pom.xml文件查看到本地存儲庫中。一旦JAR被創建,它就被安裝在本地存儲庫中。
  3. Maven將最終編譯simple-webapp項目。 Maven將爲父pom.xml執行相同的操作,但也適用於簡單天氣項目。

的situtation在第三點解釋是很重要的:如果你想建立的簡單的webapp項目,Maven將總是試圖找到他所有的依賴關係 - 包括簡單全天候 - 從本地(或遠程)存儲庫。

這就是爲什麼如果你只構造簡單的web應用無需編譯和安裝簡單天氣,Maven會找不到後一個項目,或將找到的舊版本。因此,總而言之,當您使用Maven處理多模塊項目時,嘗試始終從根目錄(或父目錄)運行構建和安裝命令。

我希望這個解釋很清楚,並且幫助你理解你的情況會發生什麼。不要猶豫,要求提供更多信息...

+0

謝謝你的解釋,這肯定有助於爲我澄清一些事情,但我沒有完全得到我的問題的答案。這是事情,如果我不想改變webapp內的任何東西,讓我們說,而不是打印「這裏是01201的天氣條件」我想打印「當前的天氣條件01201是」,我從它的主要pom.xml當然,沒有任何變化..舊的信息打印,但是如果我把webapp帶到父母之外,不用創建任何東西,而是將其粘貼回父母,而不是一遍又一遍地修改,只有這樣我才能得到更新。 – 2010-02-05 13:15:26

+0

@romaintaz我應該分享項目/代碼嗎?因爲我現在很確定maven是如何工作的,而這不應該發生。謝謝 – 2010-02-05 13:15:55

+0

你是指「如果我把webapp *放在父母之外」是什麼意思?你的意思是你從父母的''列表中刪除了webapp?也許你可以編輯你的問題,並告訴我們你的pom.xml文件... – romaintaz 2010-02-05 13:22:02