【问题标题】:Add entries to MANIFEST.MF during packaging from another Maven plugin在从另一个 Maven 插件打包期间向 MANIFEST.MF 添加条目
【发布时间】:2016-05-06 09:33:18
【问题描述】:

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

插件运行良好,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 中的常规战争插件需要额外的清单条目。我不知道这是否有可能

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

非常感谢任何建议/帮助。

【问题讨论】:

  • 什么不自己在插件中创建清单文件?
  • 在这种情况下,标准的战争插件会覆盖自定义的。

标签: maven maven-3 maven-plugin


【解决方案1】:

最简单的解决方案是使用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 而不是那么古老的版本。

顺便说一句:让contributions to the maven-war-plugin 支持这些东西怎么样?

【讨论】:

  • 您好,非常感谢您的回复,但它并没有真正解决手头的问题。我们正在尝试完全消除对 maven-war-plugin 配置的需求。在我的示例中使用 manifestFile 而不是 mainClass 方法并不能实现该目标。把你的观点放在贡献上……它可能会这样;-)
  • 比你的插件必须创建合适的文件加上结构而且你需要定义自己的生命周期和单独的打包类型来防止干扰maven-war-plugin ....
  • 谢谢,我会看看那个选项。至少我现在知道没有更简单的方法了……
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2017-04-07
    • 2012-03-24
    • 1970-01-01
    • 2014-09-30
    • 2014-07-10
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多