5

[更新]原始问题(下)已解决。我需要打电话

mvn package appassembler:assemble

代替

mvn package
mvn appassembler:assemble

问:为什么有区别?

[原来的]

我正在尝试使用maven appassembler 插件来创建一个包含所有依赖项的命令行工具。它几乎可以工作,但缺少当前模块的工件。所有依赖的工件都被复制到 repo 中,bat 中的类路径包括当前的工件。配置如下:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <configuration>
                <platforms>
                    <platform>windows</platform>
                    <platform>unix</platform>
                </platforms>
                <programs>
                    <program>
                        <mainClass>${mainclass}</mainClass>
                        <name>huffman</name>
                    </program>
                </programs>
            </configuration>
        </plugin>

有任何想法吗?

4

1 回答 1

12

该目标并非旨在独立运行,而是作为生命周期的一部分 - 因此,它取决于目标所实施的流程,package以将有关其已创建内容的信息返回给项目实例。当您将其作为两个 Maven 命令运行时,信息将丢失。

您应该使用以下命令,而不是这些命令中的任何一个:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>appassembler-maven-plugin</artifactId>
  <configuration>
   ... 
  </configuration>
  <executions>
    <execution>
      <id>assemble</id>
      <goals>
        <goal>assemble</goal>
      </goals>
    </execution>
  </executions>
</plugin>

这意味着您只需要运行mvn package,两个步骤都将运行。

如果您的意图是让 appassembler 部分成为可选部分,则可以改为将其放入具有与上述相同代码的配置文件中。

于 2011-05-13T23:26:23.510 回答