मैंने इसे समझने की कोशिश करने में बहुत अधिक समय बिताया है। यह सबसे आसान बात होनी चाहिए और जार में जावा अनुप्रयोगों को वितरित करने वाले प्रत्येक व्यक्ति को इससे निपटना होगा।आप MANIFEST.MF कैसे बनाते हैं जो उत्पादन में एक जार से परीक्षण और चलते समय उपलब्ध होता है?
मैं बस अपने जावा ऐप में वर्जनिंग जोड़ने का उचित तरीका जानना चाहता हूं ताकि जब मैं परीक्षण कर रहा हूं, तो मैं संस्करण की जानकारी तक पहुंच सकता हूं, उदा। ग्रहण और में एक जार से चलने में डीबगिंग।
<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>
यह /META-INF/MANIFEST.MF बनाता है और मैं मान जब मैं thusly ग्रहण में डीबगिंग कर रहा हूँ पढ़ सकते हैं::
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.");
}
यहाँ क्या मैं अपने build.xml में है
}
लेकिन, जब मैं जार फ़ाइल बनाने, यह एक जार के प्रकट लोड करता है (शायद पहले जार आवेदन द्वारा लोड - मेरे मामले, activation.jar में)।
इसके अलावा, निम्न कोड काम नहीं करता है हालांकि सभी उचित मान मैनिफेस्ट फ़ाइल में हैं।
Package thisPackage = getClass().getPackage();
String implementationVersion = thisPackage.getImplementationVersion();
कोई विचार?
किसी भी तीसरे पक्ष के पुस्तकालयों का उपयोग करता है एक वास्तविक दुनिया आवेदन में, यह निहायत गलत लौटने की संभावना है प्रकट। –
कक्षा का नाम अपरकेस में शुरू होना चाहिए। यह पैकेज संस्करण के बजाय पैकेजवर्सन होना चाहिए। – Carlos