Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在编译阶段生成MANIFEST.MF文件_Java_Maven_Intellij Idea_Manifest_Manifest.mf - Fatal编程技术网

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

Java 如何在编译阶段生成MANIFEST.MF文件,java,maven,intellij-idea,manifest,manifest.mf,Java,Maven,Intellij Idea,Manifest,Manifest.mf,标准方法-使用maven jar插件-仅在包阶段生成清单文件,并直接生成jar文件 我需要的是在编译阶段生成清单,并在/classes/META-INF 我的目标是能够在IntelliJ Idea中以调试模式运行的项目中读取此清单文件。(Idea从/classes而不是从/*.jar中解析项目中的jar依赖项,用于热插拔) 到目前为止,我知道的唯一解决方案是在src/main/java/resources/META-INF中创建我自己的MANIFEST.MF,并在参考资料阶段对其进行过滤和复制。

标准方法-使用
maven jar插件
-仅在包阶段生成清单文件,并直接生成jar文件

我需要的是在编译阶段生成清单,并在
/classes/META-INF

我的目标是能够在IntelliJ Idea中以调试模式运行的项目中读取此清单文件。(Idea从
/classes
而不是从
/*.jar
中解析项目中的jar依赖项,用于热插拔)


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

您可以使用maven bundle插件来实现这一点

   <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>

org.apache.felix
maven捆绑插件
3.3.0
捆绑清单
进程类
显示
真的
真的
真的
${project.url}
${java.version}
${java.vendor}
${os.name}
${os.arch}
${os.version}
${project.scm.url}
${project.scm.connection}

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


org.apache.felix
maven捆绑插件
4.2.1
捆绑清单
编译

我认为没有一个插件可以直接做到这一点。一种人为的方法是绑定执行
maven-jar-plugin
,以编译、解压jar并复制清单。。。一个更直接的解决方案是使用Maven Archiver创建自定义插件。嗨,Petr,你找到解决方案了吗?@fmilani这是一个老问题,我已经忘记了:)你试过下面@frekele的答案了吗?如果它不起作用,我可以向github上的
maven jar plugin
提出建议/推送请求,前提是项目在那里,并且回购所有者处于活动状态。或者按照@Tunaki的建议制作一个自定义插件。我尝试了@frekele的答案,但它没有根据需要生成target/Project version/META-INF/MANIFEST.MF,以尝试在Netbeans中调试项目,该项目从该位置而不是WAR文件运行。我正在寻找一个选项,在构建期间在那里创建清单,而不是在打包期间在.war中创建清单。这并不像maven war插件在打包到target/Project-verssion.war期间在target/Project-version/META-INF/中生成类似的archive/manifestEntries块那样