21 Stimmen

Wie erstellen Sie eine MANIFEST.MF, die verfügbar ist, wenn Sie testen und aus einem Jar in der Produktion laufen?

Ich habe viel zu viel Zeit damit verbracht, das herauszufinden. Das sollte die einfachste Sache sein, und jeder, der Java-Anwendungen in Jars verteilt, muss sich damit befassen.

Ich möchte nur wissen, wie ich die Versionskontrolle zu meiner Java-Anwendung hinzufügen kann, damit ich beim Testen, z. B. beim Debuggen in Eclipse, auf die Versionsinformationen zugreifen kann. y die aus einem Glas laufen.

Hier ist, was ich in meinem build.xml haben:

<target name="jar" depends = "compile">
    <property name="version.num" value="1.0.0"/>
    <buildnumber file="build.num"/>
    <tstamp>
        <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
    </tstamp>

    <manifest file="${build}/META-INF/MANIFEST.MF">
        <attribute name="Built-By" value="${user.name}" />
        <attribute name="Built-Date" value="${TODAY}" />                   
        <attribute name="Implementation-Title" value="MyApp" />
        <attribute name="Implementation-Vendor" value="MyCompany" />                
        <attribute name="Implementation-Version" value="${version.num}-b${build.number}"/>                              
    </manifest>

    <jar destfile="${build}/myapp.jar" basedir="${build}" excludes="*.jar" />                   
</target>

Dadurch wird /META-INF/MANIFEST.MF erstellt, und ich kann die Werte beim Debuggen in Eclipse auf diese Weise lesen:

public MyClass()
{
    try
    {                        
        InputStream stream = getClass().getResourceAsStream("/META-INF/MANIFEST.MF");
        Manifest manifest = new Manifest(stream);            

        Attributes attributes = manifest.getMainAttributes();

        String implementationTitle = attributes.getValue("Implementation-Title");
        String implementationVersion = attributes.getValue("Implementation-Version");
        String builtDate = attributes.getValue("Built-Date");
        String builtBy = attributes.getValue("Built-By");
   }
   catch (IOException e)
   {            
        logger.error("Couldn't read manifest.");
   }        

}

Wenn ich jedoch die Jar-Datei erstelle, wird das Manifest einer anderen Jar-Datei geladen (vermutlich die erste von der Anwendung geladene Jar-Datei - in meinem Fall activation.jar).

Auch der folgende Code funktioniert nicht, obwohl alle richtigen Werte in der Manifestdatei enthalten sind.

    Package thisPackage = getClass().getPackage();
    String implementationVersion = thisPackage.getImplementationVersion();

Irgendwelche Ideen?

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