<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Maven項目常見問題實戰(一) 解決相互依賴

    很多時候隨著項目的膨脹,模塊會越來越多,如果設計上 稍有不慎就會出現模塊之間相互依賴的情況。這對于使用Maven的用戶是比較痛苦的,因為出現模塊之間相互依賴的話在構建的時候就會失敗,Maven通常要先編譯被依賴的模塊,如果出現相互依賴Maven就不知道該怎么辦了。下圖描述了三個Maven模塊相互依賴的場景:

    Company Logo

    圖中模塊C依賴于模塊B,模塊B依賴于模塊A,而模塊A又依賴于模塊C,這樣就出現了相互依賴情況,如果運行mvn compile會出現如下錯誤:

    [INFO] Scanning for projects... 
    [ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Ve rtex{label='org.kuuyee.sample:module-C:1.0-SNAPSHOT'}' and 'Vertex{label='org.ku uyee.sample:module-B:1.0-SNAPSHOT'}' introduces to cycle in the graph org.kuuyee .sample:module-B:1.0-SNAPSHOT --> org.kuuyee.sample:module-A:1.0-SNAPSHOT --> or g.kuuyee.sample:module-C:1.0-SNAPSHOT --> org.kuuyee.sample:module-B:1.0-SNAPSHO T -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleException

    使用build-helper-maven-plugin解決相互依賴的問題

    我的解決辦法就是先把相互依賴的模塊整合在一起,相當于把這些模塊合并成一個單獨的模塊統一編譯,如下圖:

    Company Logo

    這樣就產生了一個合并模塊D,我們把它當做一個輔助構建模塊,然后讓A、B、C模塊都依賴于D模塊,這樣的話就可以成功編譯A、B和C模塊,如下圖:

    Company Logo

    要想把A、B、C三個模塊整合在一起編譯,需要借助build-helper-maven-plugin插件,這個插件在Maven構建周期提供一些輔助功能,下面列出插件的提供的功能列表:

    • build-helper:add-source:添加更多的構建源碼目錄

    • build-helper:add-test-source:添加更多的測試源碼目錄

    • build-helper:add-resource:添加更多的資源目錄

    • build-helper:add-test-resource:添加更多的測試資源目錄

    • build-helper:attach-artifact:在安裝和部署周期附加artifacts

    • build-helper:maven-version:添加一個指定當前Maven版本的屬性

    • build-helper:parse-version:添加一個指定組件版本的屬性

    • build-helper:released-version:決定當前項目的最終版本

    • build-helper:remove-project-artifact:從本地資源庫中移除項目的artifacts

    • build-helper:reserve-network-port:Reserve a list of random and unused network ports.

    在這里我們要用到build-helper:add-source這個功能,將模塊A、B、C的源碼路徑加進來。

    我們再添加一個輔助模塊D,在輔助模塊D中使用build-helper-maven-plugin插件,然后讓模塊A、B、C都依賴于輔助模塊D,模塊D的POM模型如下:

    <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">
    <parent>
    <groupId>org.kuuyee.sample</groupId>
    <artifactId>sample-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.kuuyee.sample</groupId>
    <artifactId>module-D</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>module-D</name>
    <url>http://maven.apache.org</url>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <module.a.src>../../module/module-A/src/main/java</module.a.src>
    <module.b.src>../../module/module-B/src/main/java</module.b.src>
    <module.c.src>../../module/module-C/src/main/java</module.c.src>
    </properties>
    <build>
    <plugins>
    <!-- 解決模塊相互依賴,綜合所有相互依賴代碼統一編譯 -->
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
    <execution>
    <id>add-source</id>
    <phase>generate-sources</phase>
    <goals>
    <goal>add-source</goal>
    </goals>
    <configuration>
    <sources>
    <source>${module.a.src}</source>
    <source>${module.b.src}</source>
    <source>${module.c.src}</source>
    </sources>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>

    這時候你在運行例子就能夠成功構建了!

    2011-06-28

    posted on 2011-06-28 12:40 kuuyee 閱讀(35476) 評論(3)  編輯  收藏 所屬分類: Git/MavenJEE

    評論

    # re: Maven項目常見問題實戰(一) 解決相互依賴 2011-06-28 20:49 bryan

    自己的項目是通過重構類來解決這個問題的.原來是可以這樣的,謝謝  回復  更多評論   

    # re: Maven項目常見問題實戰(一) 解決相互依賴[未登錄] 2014-01-09 18:30 kevin

    A,B,C在依賴于D時,在eclipse中還是會報錯。為什么?
    查看ABC各自己的依賴樹,發現D的Classes內所以的文件都未出在ABC引用。
    Help!  回復  更多評論   

    # re: Maven項目常見問題實戰(一) 解決相互依賴[未登錄] 2014-01-09 18:33 kuuyee

    只能說你的Maven POM文件配置還不對@kevin
      回復  更多評論   

    導航

    <2011年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統計

    隨筆分類(139)

    Linux內核

    搜索

    •  

    積分與排名

    • 積分 - 319321
    • 排名 - 177

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 中文精品人人永久免费| 免费人成再在线观看网站| 免费观看男人吊女人视频| 亚洲午夜日韩高清一区| jzzjzz免费观看大片免费| 亚洲精品在线视频| a级毛片免费高清视频| 久久影视国产亚洲| 三上悠亚在线观看免费| 久久精品视频亚洲| 麻豆视频免费播放| 亚洲一级特黄特黄的大片| 在线中文高清资源免费观看| 亚洲日韩国产一区二区三区在线| 大陆一级毛片免费视频观看| 美女免费视频一区二区三区| 国产亚洲精品精品国产亚洲综合| 免费人成在线观看视频高潮| 亚洲欧洲国产精品你懂的| 免费精品国产自产拍在线观看图片| 亚洲国产成人99精品激情在线| 青青草国产免费久久久下载| 一个人看www免费高清字幕| 亚洲熟妇无码乱子AV电影| 老汉精品免费AV在线播放| 亚洲激情视频图片| 亚洲第一视频在线观看免费| 国产自国产自愉自愉免费24区| 亚洲国产成人超福利久久精品| 日韩午夜免费视频| 中文字幕在线免费视频| 亚洲一卡2卡4卡5卡6卡在线99| 手机看片久久国产免费| 在线成人精品国产区免费| 亚洲成_人网站图片| 久久久久亚洲精品无码网址| 国产成人精品免费视频大全麻豆| 黄页视频在线观看免费| 99人中文字幕亚洲区| 永久黄网站色视频免费直播| 嫩草成人永久免费观看|