2009-08-06 16 views
17

Ist es möglich, Einträge in die manifest.mf-Datei von Gläsern, die von Netbeans erzeugt werden, hinzuzufügen?Netbeans manifest

um ein osgi-Bundle zum Beispiel zu erstellen.

Antwort

17

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

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

manifest.file=manifest.mf 

nächstes eine Ameise Aufgabe erstellen, erstellen/aktualisieren das Manifest der „build.xml“ Datei. In diesem Beispiel werden die Versionsnummer und das Datum der JAR-Datei festgelegt.

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

Dies wird eine Manifest-Datei in Ihrem Netbeans Projektverzeichnis und stopft es in der JAR-Datei erstellen. Wenn Sie die automatisch generierte Manifest-Datei von Ihrem Netbeans Projektverzeichnis löschen möchten, erstellen Sie einfach eine andere Ameise Aufgabe (post jar natürlich):

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

Das funktioniert wirklich gut, danke! Aber warum ändern sich die Codebasis und die Berechtigungen nicht (es ist immer noch auf den Standardwert gesetzt). Kann das hier nicht geändert werden? – hgerdin

1

im selben Verzeichnis wie die build.xml Sie Ihre manifest.mf Datei

setzen kann ich bin mit Netbeans 6.7.1 Es stellte sich heraus, dass die Build-imp.xml (die eigentliche Build-Skript Netbeans

verwendet)
  • kein Ziel haben, die, wenn ausgeführt ‚mit manifester, ohne Hauptklasse‘
  • aber ein wie hat ‚mit manifester, mit Hauptklasse‘
So

.. stellen Sie sicher, das Projekt-Eigenschaften haben, laufen, Haupt-Klasse mit -anything- gefüllt

ich denke, das ist einige undokumentierte Funktion :(

das ist mein manifesten 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

Ja, aber das Problem mit diesem ist, dass netbeans jede Eigenschaft weigert sich, es nicht versteht, und es nicht viel zu verstehen. Alle osgi-Eigenschaften wie Bundle-ManifestVersion oder Bundle-Activator werden abgelehnt. –

+0

Ich habe dieses Problem nicht in gewöhnlichen Netbeans 6.7.1 Java-Projekt. Ich kann beliebige Bundle-xxxx-Eigenschaft in dem benutzerdefinierten Manifest ausfüllen. Was in meinem Fall passiert ist, dass es die gesamte Manifest-Datei vollständig ignoriert und ein Standard-Manifest erstellt hat. – Houtman

-2

Siehe this article.

Hier wird beschrieben, wie man

  • eigene ant Ziele erstellen
  • hinzufügen manuelle Eingaben für die Ausgabe JAR
  • laufen benutzerdefinierte ant Ziele von Netbeans MANIFEST.MF
+0

Der referenzierte Artikel spricht nicht sehr direkt auf diese Frage. Wenn Sie sich auf die benutzerdefinierte Ameisen-Aufgabe beziehen, ist das keine sehr gute Annäherung an die einfache Aufgabe, dem Manifest einen Eintrag hinzuzufügen, IMHO. –

6

Interessante Informationen könnten hier sein:

http://wiki.netbeans.org/FaqNoMainClass

+2

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

+0

Yepp. Dies ist wahrscheinlich die beste Lösung. Obwohl ich optimalerweise möchte, dass es bessere GUI-Optionen gibt, um zu modifizieren, was in der Manifest-Datei landet. Aber für jetzt wird dies tun. – UmaN

+0

Das hat bei NB 8 nicht funktioniert. – Yster

2

Ich habe ein Java-Klassenbibliotheksprojekt mit einer benutzerdefinierten Manifestdatei - perfekt für ein OSGI-Paket. Um diese Arbeit zuerst bearbeiten project.properties und setzt:

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

Erstellen Sie Ihre eigene manifest.mf Datei im Projektverzeichnis.

(An diesem Punkt, wenn Sie versuchen, eine saubere/Build, erhalten Sie immer noch nicht Ihre benutzerdefinierten Manifest-Datei - NetBeans wird seine eigenen zur Verfügung. Dies ist, weil die Build-impl.xml Ant-Target "-do-jar-mit -Bibliotheken-ohne-Manifest“wird unmittelbar nach dem Namen "-do-jar-with-Manifest", Ihre benutzerdefiniertes Manifest JAR-Datei mit einem Standard NetBeans manifest JAR überschrieben werden.)

ein eigenes Ziel zu Ihrem build.xml hinzufügen Datei wie folgt:

<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