从Maven Project构建包含多个可选模块的任意ditributions

时间:2010-01-05 16:28:00

标签: spring maven-2 distribution

首先:我的Maven知识有限,所以请耐心等待。 ;-)我有一个简单的Maven项目,目前由三个模块组成。包含应用程序核心的模块称为核心(Creative name,huh?:-)),其他模块基本上是此核心模块的插件。有一个限制:只能在核心模块中添加一个插件。

核心模块有自己的Spring IoC配置减去插件配置。这很简单:核心代码将读取名为“plugin”的bean,该bean未在核心配置中定义。插件模块将发送他们自己的配置文件,这些文件将提供一个名为“plugin”的bean,然后由核心代码使用。这非常适合我的用例。

我想提供将部署系统的Admin,这是一种构建包含核心,选定插件和合理默认配置的分发的简单方法。也许是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的了解有限,目前我无处可去,即使我知道汇编插件可能是要走的路。特别是如何从每个模块获取依赖关系,在哪里配置插件(在父项目中?)甚至一些汇编描述符都会有很大帮助。

感谢您的所有投入!

2 个答案:

答案 0 :(得分:1)

我使用程序集插件打包命令行应用程序的分发,如下所示:

  • 在pom中定义程序集插件,
    这包括将插件绑定到build life-cycle
  • 的包阶段
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-3</version>
    <configuration>
        <descriptors>
            <descriptor>src/main/assembly/bin.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>assembly</id>
            <phase>package</phase>
            <goals>
                <goal>assembly</goal>
            </goals>
        </execution>
    </executions>
</plugin>
  • 定义程序集描述符,即指定可分发归档文件的内容和结构,如下所示:
<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 assembly:assembly
      mvn包
      mvn安装
      mvn deploy

答案 1 :(得分:0)

如果您只是期待确认,那么我确认您所描述的情况是Maven Assembly plugin的完美用例。我只是使用单独的配置文件来处理限制(“只有一个插件可以添加到核心模块”)。

如果您希望获得更具体的指导,请添加具体问题:)