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.
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.
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>
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?
-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.
Danke, das hat geholfen. Ich habe auch eine ausführlichere Version dieser Antwort hier gefunden: javaxt.com/Tutorials/Netbeans/
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!
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
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)
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: ( ..... )
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.
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.