在打包期间从另一个Maven插件添加条目到MANIFEST.MF

时间:2016-05-06 09:33:18

标签: maven maven-3 maven-plugin

我们已经创建了一个Maven插件来简化可执行war文件的创建。该方法类似于此处描述的方法:http://uguptablog.blogspot.co.uk/2012/09/embedded-jetty-executable-war-with.html。我们的自定义mojo完成了antrun插件和解包依赖步骤的工作,大大减少了开发人员不必为简单的webapp担心的混乱和细节。

该插件工作正常,webapp POM看起来像这样:

        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <attachClasses>true</attachClasses>
                <archive>
                    <manifest>
                        <mainClass>com.acme.Bootstrap</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.acme</groupId>
            <artifactId>exec-war-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
        </plugin>

我们要做的是删除maven-war-plugin配置,因为只需要将Main-Class属性写入清单。我很难看到如何实现这一目标,但我可以看到两种可能的方法:

  • 以某种方式从我们的mojo向常规战争插件指示需要额外的清单条目。我不知道这是否可能是遥远的

  • 让我们的插件扩展默认的war插件。我不知道这是否可能,因为war插件绑定到打包/生命周期,我认为你不能从另一个插件中影响这个。每个项目都必须自定义生命周期,这会使对象失败,因为它比上面的配置更难!

任何建议/帮助都非常感激。

2 个答案:

答案 0 :(得分:0)

最简单的解决方案是使用achive configuration of the Maven War Plugin,如下所示:

但是你的插件应该绑定到生命周期阶段generate-resources,以确保你的插件在maven-war-plugin之前运行,因为给定的pom意味着你的插件将在maven-war-plugin之后运行。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        ...
        <configuration>
          <archive>
            <manifestFile>target/xyz/MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
        ...
      </plugin>
    </plugins>
  </build>
  ...
</project>

此外,我建议使用uptodate version of the plugin而不是如此古老的版本。

BTW:让contributions to the maven-war-plugin支持这些事情怎么样?

答案 1 :(得分:0)

maven-war-plugin(以及maven-jar-plugin)使用Apache Maven Archiver来构建输出存档。

您可以尝试在插件中使用Apache Maven Archiver,您可以在maven-war-plugin source code中看到如何操作。