使用多模块项目

时间:2015-10-12 19:07:52

标签: java maven netbeans maven-assembly-plugin multi-module

我们有一个与我们合作的人使用maven-assembly-plugin打包所有依赖项。他已离开公司,我试图弄清楚他是如何做到这一点的。我刚刚学习maven-assembly-plugin。

我们的应用程序分为Maven POM项目和相关的模块项目。在以下示例中,我包含了运行时模块项目。我试图在我的应用程序中创建一个名为runtime的模块项目,但是当我做出任何更改时,它会丢失与父项目的关联。

我们正在使用Netbeans。

+- pom.xml
+- Simulator 
    +- pom.xml 
+- comms 
    +- pom.xml 
    +- src 
        +- main 
            +- java
+- framework 
    +- pom.xml 
    +- src 
        +- main 
            +- java
+- core 
    +- pom.xml 
    +- src 
        +- main    
            +- java

这就是我想要创造的:

+- runtime 
    +- pom.xml 
    +- src 
        +- assemble 
            +- assembly (xml file)
    +- target 
        +- Simulator   
        +- archive-tmp    
        +- classes     
        +- test-classes     
        +- Simulator (zip file)
    +- config 
    +- data   
    +- scripts  

在做了一些研究之后,我想我可能会把车推到马前。我已经有一个包含模块项目的主项目。

  1. 那么下一步到底是什么?
  2. 创建程序集描述符文件?
  3. 将我的主pom文件编辑为父级?
  4. 以下是一些有用的问题和答案,但我仍然感到困惑。有人可以告诉我先做什么吗?

    Maven assembly on multi module project with special structure

    How to use Maven assembly plugin with multi module maven project

    修改

    我弄清楚为什么模块从我的主项目中消失了。 Netbeans !! 我重启了它,我的运行时模块就在那里。

    那么,现在我需要在运行时模块中编辑我的POM文件吗?

1 个答案:

答案 0 :(得分:2)

如果我正确地阅读了您的问题,您要做的是将一个新的Maven模块(称为runtime)添加到现有项目中,并使用此新项目上的maven-assembly-plugin对其进行打包。

然后第一步是创建Maven模块。我不确定Netbeans是否提供了这样做的工具(Eclise确实如此),但它归结为:

    在父POM的<modules>部分中
  • ,为<module>添加新的runtime
  • 在父POM
  • 的同一目录级别创建一个名为runtime的新文件夹
  • 在这个新文件夹中创建一个文件pom.xml,将根POM声明为父POM,如下所示:

    <parent>
        <groupId>...</groupId>
        <artifactId>...</artifactId>
        <version>...</version>
    </parent>
    

然后,您需要配置maven-assembly-plugin来执行此新模块的打包。这是在汇编描述符的帮助下完成的,汇编描述符的格式为documented here

为了给您一些开始,请考虑以下POM配置和程序集描述符,它会将configdatascripts下的所有内容打包到一个zip文件中:< / p>

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>src/assemble/assembly.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
     </executions>
  </plugin>

使用assembly.xml

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  <id>distribution</id>
  <formats>
      <format>zip</format>
  </formats>
  <fileSets>
      <fileSet>
          <directory>config</directory>
          <outputDirectory>/config</outputDirectory>
      </fileSet>
      <fileSet>
          <directory>data</directory>
          <outputDirectory>/data</outputDirectory>
      </fileSet>
      <fileSet>
          <directory>scripts</directory>
          <outputDirectory>/scripts</outputDirectory>
      </fileSet>
    </fileSets>
</assembly>

在父POM上运行mvn clean install后,将在模块target的{​​{1}}目录下创建一个zip文件。它将包含3个指定的文件夹。