2

首先:我的Maven知识有限,请多多包涵。;-) 我有一个简单的 Maven 项目,目前由三个模块组成。包含应用程序核心的模块称为核心(创意名称,嗯?:-)),其他模块基本上是这个核心模块的插件。有一个限制:核心模块只能添加一个插件。

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

我想为将部署系统的管理员提供一种构建包含核心、选定插件和合理默认配置的发行版的简单方法。也许是一个tar.gz或类似的东西。我不希望他挖掘我的 Spring IoC 文件,将它们复制在一起等等。诸如 TCP/IP 端口之类的实际配置是在属性文件中完成的。

为了澄清我的意思,我已经建立了一个示例结构。请注意,文件名仅用于说明目的。

/bin/core.jar [从核心模块构建]  
/bin/plugin.jar [从插件模块构建]

/lib-bin/library-required-by-plugin.jar [maven + copy解决的依赖关系]
/lib-bin/library-required-by-core.jar [maven + copy解决的依赖关系]
/lib-bin/another-library-required-by-core.jar [依赖由 maven + 复制解决]

/etc/spring/core-beans.xml [复制自核心模块 /etc/]
/etc/spring/plugin.xml [从插件模块 /etc/ 复制]
/etc/default-core-config.properties [从核心模块 /etc/ 复制]
/etc/default-plugin-config.properties [从插件模块 /etc/ 复制]

我目前正在使用组装插件,但我似乎在转圈,没有任何效果。相当令人沮丧。如果您需要更多信息或不明白我的意思,请随时询问。:-)

除了澄清我的问题:如何做到这一点?(嗯,就是这么简单:-))正如我之前所说,我对 Maven 的了解是有限的,目前我无处可去,即使我知道汇编插件可能是要走的路。尤其是如何从每个模块中获取依赖项,在哪里配置插件(在父项目中?),甚至是一些程序集描述符都会有很大帮助。

感谢您的所有意见!

4

2 回答 2

1

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

<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 组装:组装
    mvn 包
    mvn 安装
    mvn 部署

于 2010-01-05T21:26:25.217 回答
0

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

如果您期待更具体的指导,请添加一个具体问题:)

于 2010-01-05T18:58:53.530 回答