如何在编译阶段生成MANIFEST.MF文件

时间:2016-01-08 09:54:47

标签: java maven intellij-idea manifest manifest.mf

标准方式 - 使用maven-jar-plugin - 仅在打包阶段生成清单文件,并直接生成jar文件。

我需要的是在编译阶段生成清单并在<target>/classes/META-INF中可用。

我的目标是能够在IntelliJ Idea中以调试模式运行的项目中读取此清单文件。 (Idea解决了来自<target>/classes而非<target>/*.jar的项目内jar依赖关系 - 用于热交换目的。)

到目前为止,我所知道的唯一解决方案是在src/main/java/resources/META-INF中实际创建自己的MANIFEST.MF,并在资源阶段过滤和复制它。但我想避免这种解决方案,我希望使用pom文件中的<archive>配置生成清单标准方式。

2 个答案:

答案 0 :(得分:1)

您可以使用maven-bundle-plugin执行此操作。

   <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
            <execution>
                <id>bundle-manifest</id>
                <phase>process-classes</phase>
                <goals>
                    <goal>manifest</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <archive>
                <index>true</index>
                <manifest>
                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                </manifest>
                <manifestEntries>
                    <Implementation-URL>${project.url}</Implementation-URL>
                    <Java-Version>${java.version}</Java-Version>
                    <Java-Vendor>${java.vendor}</Java-Vendor>
                    <Os-Name>${os.name}</Os-Name>
                    <Os-Arch>${os.arch}</Os-Arch>
                    <Os-Version>${os.version}</Os-Version>
                    <Scm-Url>${project.scm.url}</Scm-Url>
                    <Scm-Connection>${project.scm.connection}</Scm-Connection>
                </manifestEntries>
            </archive>
        </configuration>
    </plugin>

答案 1 :(得分:0)

非常感谢@frekele的出色回答。由于我无法在现有答案中添加注释,因此添加此注释以注意,如果要在编译阶段生成清单,则需要绑定到compile阶段而不是process-classes

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>4.2.1</version>
    <executions>
        <execution>
        <id>bundle-manifest</id>
        <phase>compile</phase>
        <!-- ... -->
相关问题