2010-01-05 66 views
2

首先:我的Maven知識有限,請耐心等待。 ;-)我有一個簡單的Maven項目,目前由三個模塊組成。包含應用程序核心的模塊稱爲核心(Creative name,呵?:-)),其他模塊基本上都是該核心模塊的插件。有一個限制:只能將一個插件添加到核心模塊。從Maven項目構建包含多個可選模塊的任意分佈

核心模塊具有自己的Spring IoC配置減去插件配置。這很簡單:核心代碼將讀取一個名爲「plugin」的bean,該bean在覈心配置中沒有定義。插件模塊將發佈他們自己的配置文件,這些文件將提供一個名爲「plugin」的bean,然後由核心代碼使用。這完全符合我的用例。

我想提供管理員,這將部署系統,一種簡單的方法來建立一個包含核心,一個選定的插件和合理的默認配置的分佈。也許tar.gz或類似的東西。我不希望他通過我的Spring IoC文件進行挖掘,將它們複製在一起等等。像TCP/IP端口這樣的實際配置是在屬性文件中完成的。

爲了闡明我的意思,我構建了一個示例結構。請注意,文件名僅用於解釋目的。

 
/bin/core.jar [Build from core module] 
/bin/plugin.jar [Build from a plugin module] 

/lib-bin/library-required-by-plugin.jar [Dependency resolved by maven + copy] 
/lib-bin/library-required-by-core.jar [Dependency resolved by maven + copy] 
/lib-bin/another-library-required-by-core.jar [Dependency resolved by maven + copy] 

/etc/spring/core-beans.xml [Copied from core module /etc/] 
/etc/spring/plugin.xml [Copied from plugin module /etc/] 
/etc/default-core-config.properties [Copied from core module /etc/] 
/etc/default-plugin-config.properties [Copied from plugin module /etc/] 

我目前正在亂七八糟的程序集插件,但我似乎圍繞着圓圈,沒有任何工作。相當令人沮喪。如果你需要更多的信息,或者不明白我的觀點,請隨時提問。 :-)

除了澄清我的問題:如何做到這一點? (嗯,就是這麼簡單:-))正如我之前所說的,我對Maven的知識是有限的,而且目前我無處可去,即使我知道程序集插件可能是要走的路。特別是如何從每個模塊獲取依賴關係,在哪裏配置插件(在父項目中?),甚至是一些程序集描述符都會有所幫助。

謝謝你的所有輸入!

回答

1

我用Assembly插件打包一個命令行應用程序的分佈如下:

包相
  • 定義組裝描述符,即指定的內容和你的分發歸檔的結構,這裏是我的如下:裝配
    MVN:
<assembly> 
    <id>bin</id> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <fileSets> 
     <fileSet> 
      <directory>target</directory> 
      <includes> 
       <include>ctmemapi.properties</include> 
       <include>ctmxml/*</include> 
       <include>scampa</include> 
       <include>*.bat</include> 
       <include>*.sh</include> 
      </includes> 
      <outputDirectory>${project.artifactId}-${project.version}</outputDirectory> 
      <fileMode>755</fileMode> 
     </fileSet> 
     <fileSet> 
      <directory>target</directory> 
      <includes> 
       <include>scampa*.jar</include> 
      </includes> 
      <outputDirectory>${project.artifactId}-${project.version}/lib</outputDirectory> 
      <fileMode>644</fileMode> 
     </fileSet> 
     <fileSet> 
      <directory>src/test/data</directory> 
      <outputDirectory>${project.artifactId}-${project.version}/test-data</outputDirectory> 
      <fileMode>644</fileMode> 
     </fileSet> 
    </fileSets> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>${project.artifactId}-${project.version}/lib</outputDirectory> 
      <fileMode>644</fileMode> 
     </dependencySet> 
    </dependencySets> 
</assembly> 
  • 用下面的命令

    MVN組件創建組件包
    mvn install
    mvn deploy

+0

看起來很有希望,我會試試這個。 – Malax 2010-01-06 11:12:17

+0

謝謝您的回答,它至少爲我提供了一個粗略的起點。現在我必須找到一種方法將模塊包含到程序集中......如果有人有這樣的片段:你會受到歡迎! – Malax 2010-01-06 11:32:56

+0

你應該在你的pom中聲明你的模塊是依賴的。 然後用不同的outputDirectory值定義兩個獨立的dependencySet組,即lib和lib-bin。 配置每個依賴集以僅包含您在該特定outputDirectory中需要的罐子。 – crowne 2010-01-06 12:14:55

0

如果您只是預計確認,那麼我確認您描述的情況是Maven Assembly plugin的理想用例。我只是使用單獨的配置文件來處理限制(「只有一個插件可以添加到核心模塊」)。

如果你期待更具體的指導,請加一個具體的問題:)

+0

增加了另一款帶有實際問題的段落。我知道,這是非常通用的,因爲我完全陷入困境,即使我目前沒有任何東西。非常感謝! – Malax 2010-01-05 19:52:18

相關問題