如果称为迭代,则maven appassembler插件不包含当前工件

ope*_*age 5 maven-2 maven-plugin maven-3 appassembler

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

mvn package appassembler:assemble
Run Code Online (Sandbox Code Playgroud)

代替

mvn package
mvn appassembler:assemble
Run Code Online (Sandbox Code Playgroud)

问题:为什么会有区别?

[原版的]

我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Bre*_*ter 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>
Run Code Online (Sandbox Code Playgroud)

这意味着您只需要运行mvn package,并且将运行这两个步骤.

如果您的目的是使appassembler部分可选,您可以将其放在具有与上面相同代码的配置文件中.