24 Stimmen

Netbeans-Manifest

Ist es möglich, Einträge in die manifest.mf-Datei von Jars von Netbeans generiert hinzufügen?

um zum Beispiel ein osgi-Bündel zu erstellen.

23voto

Peter Punkte 1124

Beachten Sie, dass Sie ein Manifest on-the-fly über einen Ant-Task erstellen und Eigenschaften dynamisch festlegen können.

Zunächst müssen Sie Ihre Netbeans-Datei "project.properties" im Verzeichnis "nbproject" aktualisieren. Fügen Sie die folgende Zeile in die Datei ein:

manifest.file=manifest.mf

Als Nächstes erstellen Sie einen Ant-Task, um das Manifest mithilfe der Datei "build.xml" zu erstellen/aktualisieren. In diesem Beispiel werden wir die Versionsnummer und das Datum der jar-Datei festlegen.

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

Dadurch wird eine Manifestdatei in Ihrem Netbeans-Projektverzeichnis erstellt und in Ihre jar-Datei eingefügt. Wenn Sie die automatisch erzeugte Manifestdatei aus Ihrem Netbeans-Projektverzeichnis löschen möchten, erstellen Sie einfach eine weitere Ant-Task (natürlich nach dem jar):

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

0 Stimmen

Das funktioniert wirklich gut, danke! Aber warum ändern sich die Codebase und die Berechtigungen nicht (sie sind noch auf Standard eingestellt). Kann das hier nicht geändert werden?

0 Stimmen

-pre-init ausgeführt wird, bevor project.properties gelesen wird, also manifest.file ist bei der Erstellung des ersten Ziels nicht gesetzt. Die Manifestdatei sollte jedoch erstellt werden, bevor -do-init sonst manifest.available wird nicht eingestellt.

0 Stimmen

Danke, das hat geholfen. Ich habe auch eine ausführlichere Version dieser Antwort hier gefunden: javaxt.com/Tutorials/Netbeans/

6voto

java.is.for.desktop Punkte 10113

Interessante Informationen könnten hier zu finden sein:

http://wiki.netbeans.org/FaqNoMainClass

2 Stimmen

Das ist die richtige Antwort! Erstellen Sie einfach die gewünschte manifest.mf im Projektstamm und hängen Sie "manifest.file=manifest.mf" an die Datei project.properties an. Vorausgesetzt, Ihr Projekt setzt keine Werte im Manifest dynamisch, das heißt. Wenn Sie sich hier etwas einfallen lassen müssen, ist es an der Zeit, sich an Maven zu wenden!

0 Stimmen

Yepp. Das ist wahrscheinlich die beste Lösung. Optimal wäre es allerdings, wenn es bessere Möglichkeiten gäbe, zu ändern, was in der Manifestdatei landet. Aber für den Moment wird das genügen.

2voto

gazzamop Punkte 21

Ich habe ein Java Class Library-Projekt mit einer benutzerdefinierten Manifestdatei - perfekt für ein OSGI-Bundle. Um dies zum Laufen zu bringen, bearbeiten Sie zunächst project.properties und setzen Sie:

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

Erstellen Sie Ihre eigene manifest.mf-Datei im Projektverzeichnis.

(Wenn Sie zu diesem Zeitpunkt ein clean/build versuchen, erhalten Sie immer noch nicht Ihre benutzerdefinierte Manifestdatei - NetBeans stellt seine eigene bereit. Dies liegt daran, dass das Ant-Ziel build-impl.xml "-do-jar-with-libraries-without-manifest" unmittelbar nach "-do-jar-with-manifest" aufgerufen wird und Ihre benutzerdefinierte Manifest-JAR-Datei mit einer Standard-NetBeans-Manifest-JAR überschreibt).

Fügen Sie Ihrer build.xml-Datei ein benutzerdefiniertes Ziel wie folgt hinzu:

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

Getestet in NetBeans 6.7.1

1voto

Houtman Punkte 2739

Im selben Verzeichnis wie die build.xml können Sie Ihre manifest.mf-Datei ablegen

Ich verwende Netbeans 6.7.1 Es stellte sich heraus, dass die build-imp.xml (das eigentliche Build-Skript, das Netbeans verwendet)

  • hat kein Ziel, das läuft, wenn 'mit Manifest, ohne Hauptklasse'
  • aber es gibt einen wie 'mit Manifest, mit Hauptklasse'

Stellen Sie also sicher, dass Sie die project-properties,run,main-Class mit -irgendwas- gefüllt haben.

ich glaube, das ist eine undokumentierte Funktion :(

dies ist mein manifester Inhalt:

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: ( ..... )

0 Stimmen

Ja, aber das Problem dabei ist, dass Netbeans jede Eigenschaft ablehnt, die es nicht versteht, und es versteht nicht viel. Alle osgi-Eigenschaften wie Bundle-ManifestVersion oder Bundle-Activator werden abgelehnt.

0 Stimmen

Ich habe dieses Problem nicht in normalen Netbeans 6.7.1 Java-Projekt. Ich kann jede Bundle-xxxx-Eigenschaft in das benutzerdefinierte Manifest eingeben. Was in meinem Fall geschah, war, dass es völlig ignoriert die gesamte Manifestdatei und erstellt ein Standardmanifest.

1voto

Lukino Punkte 1307

Falls Sie Maven (nbm-maven-plugin) verwenden, sehen Sie sich dies an

NBM Maven-Plugin

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X