我们已经创建了一个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插件绑定到打包/生命周期,我认为你不能从另一个插件中影响这个。每个项目都必须自定义生命周期,这会使对象失败,因为它比上面的配置更难!
任何建议/帮助都非常感激。
答案 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中看到如何操作。