Netbeans 清单

Posted

技术标签:

【中文标题】Netbeans 清单【英文标题】:Netbeans manifest 【发布时间】:2010-11-17 05:58:56 【问题描述】:

是否可以在 netbeans 生成的 jar 的 manifest.mf 文件中添加条目?

例如构建一个 osgi 包。

【问题讨论】:

【参考方案1】:

请注意,您可以通过 ant 任务即时创建清单并动态设置属性。

首先,您必须更新“nbproject”目录中的 Netbeans“project.properties”文件。将以下行添加到文件中:

manifest.file=manifest.mf

接下来,创建一个 ant 任务以使用“build.xml”文件创建/更新清单。在本例中,我们将设置 jar 文件的版本号和日期。

<target name="-pre-init">
   <property name="project.name" value="My Library" />
   <property name="version.num" value="1.4.1" />
   <tstamp>
      <format property="NOW" pattern="yyyy-MM-dd HH:mm:ss z" />
   </tstamp>

   <!--
   <exec outputproperty="svna.version" executable="svnversion">
       <arg value="-c" />
       <redirector>
           <outputfilterchain>
               <tokenfilter>
                   <replaceregex pattern="^[0-9]*:?" replace="" flags="g"/>
                   <replaceregex pattern="M" replace="" flags="g"/>
               </tokenfilter>
           </outputfilterchain>
       </redirector>
   </exec>
   -->


   <manifest file="MANIFEST.MF">
      <attribute name="Bundle-Name" value="$project.name" />           
      <attribute name="Bundle-Version" value="$version.num" />
      <attribute name="Bundle-Date" value="$NOW" />
      <!--<attribute name="Bundle-Revision" value="$svna.version" />-->
      <attribute name="Implementation-Title" value="$project.name" />
      <attribute name="Implementation-Version" value="$version.num" />
      <attribute name="Implementation-URL" value="http://www.example.com" />
   </manifest>

</target>

这将在您的 netbeans 项目目录中创建一个清单文件并将其填充到您的 jar 文件中。如果您想从您的 netbeans 项目目录中删除自动生成的清单文件,只需创建另一个 ant 任务(当然是发布 jar):

<target name="-post-jar">
  <delete file="MANIFEST.MF"/>
</target> 

【讨论】:

这很好用,谢谢!但是为什么 Codebase 和 Permissions 没有改变(它仍然设置为默认值)。这里不能改吗? -pre-init 在读取project.properties 之前运行,因此在创建第一个目标时未设置manifest.file。但是,manifest 文件应该在-do-init 之前创建,否则manifest.available 将不会被设置。 谢谢,有帮助。我还在这里找到了该答案的更详细版本:javaxt.com/Tutorials/Netbeans/…【参考方案2】:

有趣的信息可能在这里:

http://wiki.netbeans.org/FaqNoMainClass

【讨论】:

这是正确答案!只需在项目根目录中创建所需的 manifest.mf 并将“manifest.file=manifest.mf”附加到文件 project.properties。假设您的项目没有在清单中动态设置任何值,也就是说。如果你需要在这里变得花哨,是时候转向 maven 了! 是的。这可能是最好的解决方案。尽管最佳情况下我希望有更好的 gui 选项来修改清单文件中的内容。但就目前而言,这样就可以了。【参考方案3】:

我有一个带有自定义清单文件的 Java 类库项目 - 非常适合 OSGI 包。要使其正常工作,请先编辑 project.properties 并设置:

manifest.file=manifest.mf
manifest.available=true

在项目目录中创建您自己的自定义 manifest.mf 文件。

(此时,如果您尝试清理/构建,您仍然不会获得自定义清单文件 - NetBeans 将提供自己的。这是因为 build-impl.xml Ant 目标“-do-jar-with- library-without-manifest”在“-do-jar-with-manifest”之后立即被调用,使用默认的 NetBeans 清单 JAR 覆盖您的自定义清单 JAR 文件。)

将自定义目标添加到您的 build.xml 文件中,如下所示:

<target name="-do-jar-with-libraries-without-manifest">
    <!-- Inserted to prevent target from running so we can have a custom
         manifest file with a class library project type. -->
</target>

在 NetBeans 6.7.1 中测试

【讨论】:

【参考方案4】:

在与 build.xml 相同的目录中 你可以把你的 manifest.mf 文件

我使用的是 Netbeans 6.7.1 结果是 build-imp.xml(Netbeans 使用的实际构建脚本)

没有运行 if 'with manifest, without main-class' 的目标 但它确实有一个类似“带有清单,带有主类”

所以.. 确保你的 project-properties,run,main-Class 填充了 -anything-

我认为这是一些未记录的功能:(

这是我的清单内容:

Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Bundle-ManifestVersion: 2
Bundle-Name: jinstall
Bundle-SymbolicName: jinstall
Import-Package: ( .... )
Export-Package: ( .... )
Bundle-Activator: ( ..... )

【讨论】:

是的,但问题在于 netbeans 拒绝任何它不理解的属性,而且它不太理解。 Bundle-ManifestVersion 或 Bundle-Activator 等所有 osgi 属性都被拒绝。 我在普通的netbeans 6.7.1 java-project中没有这个问题。我可以在自定义清单中填写任何 Bundle-xxxx 属性。在我的情况下发生的事情是它完全忽略了整个清单文件并创建了一个默认清单。【参考方案5】:

如果您使用 maven (nbm-maven-plugin),请查看此

NBM Maven plugin

【讨论】:

【参考方案6】:

为什么不使用对我来说效果很好的 maven 项目?例如。 apache felix

请参阅我在 netbeans 中创建的 this pluggable Swing example。

【讨论】:

【参考方案7】:

您可以编辑nbproject/build-impl.xml 添加必要的属性,如下所示:

....
<target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
    <manifest encoding="UTF-8" file="$tmp.manifest.file" mode="update">
        <attribute name="Main-Class" value="$main.class"/>
        <attribute name="Property1" value="foo"/>
        <attribute name="Property2" value="bar"/>
    </manifest>
</target>
....

这将在 jar 文件中生成一个 MANIFEST.MF,如下所示:

Manifest-Version: 1.0
...
Property1: foo
Property2: bar

在 Netbeans 8.1 上测试。

【讨论】:

【参考方案8】:

this article

这里描述了如何

创建自己的蚂蚁目标 为输出 JAR 添加手动条目到 manifest.mf 从 Netbeans 运行自定义 ant 目标

【讨论】:

引用的文章并没有很直接地谈到这个问题。如果您指的是自定义 ant 任务......对于向清单添加条目的简单任务,恕我直言,这不是一个很好的方法。 链接上没有文章了。

以上是关于Netbeans 清单的主要内容,如果未能解决你的问题,请参考以下文章

netbeans11支持中文吗

NetBeans C++

卸载一个 netbeans 7.0.1 插件,netbeans 不启动

netbeans 显示“等待连接 (netbeans-xdebug)”

NetBeans有啥优缺点?

让Netbeans 8.0 支持 Python 编程