gpt4 book ai didi

java - IntelliJ 生成的 Ant 构建覆盖了我的 MANIFEST.MF

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:52 31 4
gpt4 key购买 nike

我在 IntelliJ 中有一个简单的项目,我进入项目结构 -> 工件 -> 从具有依赖项的模块中添加 Jar -> 复制到输出目录并通过 list 链接( list 位于 %ProjectDir%/resources/manifests/META-INF/MANIFEST.MF 中) -> OK -> OK

现在,如果我运行 make ,jar 将被放置在 out/artifacts 下如果我查看 jar 内部并打开 META-INF/MANIFEST.MF 文件,它包含正确的类路径信息。如果我然后返回 IntelliJ,生成 ant 构建并运行它,编译后的 jar 内的 META-INF/MANIFEST.MF 的内容现在如下所示:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.7.0_80-b15 (Oracle Corporation)

如您所见 Class-Path条目已被完全删除,这使我无法从其他地方使用该 jar。

所以我的问题是:有谁知道为什么intellij生成的ant构建会覆盖内置make使用的MANIFEST.MF intellij 中的功能?

我还可以补充一点,我生成此 ant 构建是因为我想做一些简单的事情,例如在编译后将构建的 jar 复制到不同的位置。

编辑:

如果我手动更改 <jar ... filesetmanifest="mergewithoutmain"><jar ... filesetmanifest="merge">在生成的 ant 脚本中,至少 Class-Path我原来的 MANIFEST.MF 出现在复制到 jar 文件中的 MANIFEST.MF 中。但是,我真的很想避免以这种方式手动更改生成的 ant 脚本。

最佳答案

您需要使用-m选项。要查看可用 JAR 选项的列表,请键入不带参数的 jar ,输出将提供参数列表和示例。根据您的情况,您可能需要修改一些 Ant 或 IntelliJ 命令以使用提供的 MANIFEST.MF 文件生成 JAR。

Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
Options:
-c create new archive
-t list table of contents for archive
-x extract named (or all) files from archive
-u update existing archive
-v generate verbose output on standard output
-f specify archive file name
-m include manifest information from specified manifest file
-e specify application entry point for stand-alone application
bundled into an executable jar file
-0 store only; use no ZIP compression
-P preserve leading '/' (absolute path) and ".." (parent directory) components from file names
-M do not create a manifest file for the entries
-i generate index information for the specified jar files
-C change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name, the archive file name and the entry point name are
specified in the same order as the 'm', 'f' and 'e' flags.

Example 1: to archive two class files into an archive called classes.jar:
jar cvf classes.jar Foo.class Bar.class
Example 2: use an existing manifest file 'mymanifest' and archive all the
files in the foo/ directory into 'classes.jar':
jar cvfm classes.jar mymanifest -C foo/ .

关于java - IntelliJ 生成的 Ant 构建覆盖了我的 MANIFEST.MF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32482800/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com