8

假设我在 Maven 项目中有以下目录布局:

src/
|-- main
|   |-- bin
|   |   |-- run.cmd
|   |   `-- run.sh
|   |-- etc
|   |   |-- common-spring.xml
|   |   |-- log4j.xml
|   |   `-- xml-spring.xml
|   `-- java
|       `-- com
...

我想构建一个 zip 文件,解压缩后会生成如下内容:

assembly
|-- bin
|   |-- run.cmd
|   `-- run.sh
|-- etc
|   |-- common-spring.xml
|   |-- log4j.xml
|   `-- xml-spring.xml
`-- lib
    |-- dependency1.jar
    |-- dependency2.jar
...

其中 `run.xx' 是可执行的 shell 脚本,它将调用我的主应用程序并将所有依赖项放在 classpath 上

这是否可以使用一些“官方”Maven 插件,例如 maven-assembly-plugin?

4

4 回答 4

11

我使用AppAssembler 插件来获得类似的东西。例子:

...
<build>
<plugins>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <configuration>
      <programs>
        <program>
          <mainClass>com.acme.MainClass</mainClass>
          <name>app</name>
        </program>
      </programs>
    </configuration>
  </plugin>
</plugins>

于 2008-11-12T10:43:10.470 回答
5

我已经使用 maven-assembly-plugin 在项目中实现了类似的功能。我希望在打包阶段构建一个 zip 文件,而不是手动调用 assembly:assembly。这是我想出的:

/src/assemble/distribution.xml:

<assembly>
  <id>distribution</id>

  <!-- specify the output formats -->
  <formats>
    <format>zip</format>
  </formats>

  <!-- include all runtime libraries in the /lib folder of the output file -->
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>

  <fileSets>
    <!-- include all *.jar files in the target directory -->
    <fileSet>
      <directory>target</directory>
      <outputDirectory></outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>

    <!-- include all files in the /conf directory -->
    <fileSet>
       <outputDirectory></outputDirectory>
       <includes>
        <include>conf/**</include>
       </includes>
    </fileSet>
  </fileSets>

</assembly>

/pom.xml

...

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>

            <configuration>
                <descriptors>
                    <descriptor>src/assemble/distribution.xml
                    </descriptor>
                </descriptors>
            </configuration>

            <!-- append assembly:assembly to the package phase -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>assembly</goal>
                    </goals>
                </execution>
            </executions>

        </plugin>

...

于 2008-11-19T07:15:40.020 回答
1

maven-assembly-plugin 还可以将依赖项复制到您的程序集中,方法是在您的程序集描述符文件中包含如下内容:

<dependencySets>
    <!-- Copy dependency jar files to 'lib' -->
    <dependencySet>
        <outputDirectory>lib</outputDirectory>
        <includes>
            <include>*:jar:*</include>
        </includes>
    </dependencySet>
</dependencySets>
于 2008-11-13T16:53:30.713 回答
-1

appassembler 为您生成“run.xx”文件。

如果您已经自己创建了 shell 脚本,则可以使用 maven-assembly-plugin 创建 zip 文件。要收集依赖项,您可以使用 maven-dependency-plugin。

于 2008-11-12T20:48:25.427 回答