2017-10-23 7 views
7

मुझे एक बहु-रिलीज जेएआर का उपयोग करके ऐप्पल के साथ समस्या दिखाई दे रही है, जो मुझे उम्मीद है कि कोई मेरी मदद कर सकता है।गलत कक्षा जावा 9 पर मल्टी रिलीज जेएआर फ़ाइल में शामिल की गई?

मेरे पास वर्जन परस्परेंट नामक कक्षा के साथ एक बहुत ही सरल बहु-रिलीज जार फ़ाइल है। जावा 9 जेआरई सिस्टम पर चलते समय इसकी विधि "संस्करण" को "जावा 9 संस्करण" प्रदर्शित करना चाहिए, और जावा 8 जेआरई सिस्टम पर चलते समय "जावा 8 या पहले संस्करण" प्रदर्शित करना चाहिए।

जब मैं जावा ब्राउज़र जेआरई 9 चलाने वाली क्लाइंट मशीन पर अपने ब्राउज़र (इंटरनेट एक्सप्लोरर वी 11) में इस यूआरएल (http://10.nnn.nn.nn/testLAC.html) में ऐप्पल चलाकर एप्पल चलाता हूं, तो सब ठीक से काम करता है; यह अपेक्षित के रूप में "जावा 9 संस्करण" प्रदर्शित करता है।

लेकिन जब मैं स्थानीय रूप से पृष्ठ देखने के लिए एक ही क्लाइंट मशीन पर इस यूआरएल (फ़ाइल: /// सी: /FOLDER_NAME/testLAC.html) दर्ज करके ऐप्पल चलाता हूं, तो यह अप्रत्याशित रूप से "जावा 8 या पहले संस्करण" प्रदर्शित करता है । ऐसा लगता है कि मल्टी रिलीज जार के जावा 9 विशिष्ट संस्करण पर निर्भर वर्ग को शामिल नहीं किया जाता है। क्या कोई मुझे समझने में मदद कर सकता है कि क्यों बहु-रिलीज जेएआर अपेक्षित काम नहीं कर रहा है? क्लाइंट मशीन में केवल जावा जेआरई 9 स्थापित है।

jar tvf mr.jar | more 
    0 Mon Oct 23 08:52:38 EDT 2017 META-INF/ 
82 Mon Oct 23 08:52:38 EDT 2017 META-INF/MANIFEST.MF   (This has Multi-Release: true !) 
    0 Thu Jun 08 07:58:28 EDT 2017 com/ 
    0 Thu Jun 08 07:58:28 EDT 2017 com/emc/ 
    0 Mon Oct 23 08:50:40 EDT 2017 com/emc/demo/ 
324 Mon Oct 23 08:43:44 EDT 2017 com/emc/demo/VersionDependent.class 
    0 Thu Jun 08 07:58:28 EDT 2017 META-INF/versions/9/ 
    0 Thu Jun 08 07:58:28 EDT 2017 META-INF/versions/9/com/ 
    0 Thu Jun 08 07:58:28 EDT 2017 META-INF/versions/9/com/emc/ 
    0 Thu Jun 08 08:24:32 EDT 2017 META-INF/versions/9/com/emc/demo/ 
313 Mon Oct 23 08:47:34 EDT 2017 META-INF/versions/9/com/emc/demo/VersionDependent.class 

यहाँ परीक्षण एप्लेट कोड जावा JRE के संस्करण प्रदर्शित करता है कि है और फिर VersionDependent.version में कॉल:

यहाँ बहु रिहाई JAR फ़ाइल की सामग्री हैं

package appletExample; 

//Reference the required Java libraries 
import java.applet.Applet; 
import java.awt.*; 
import com.emc.demo.VersionDependent; 

//The applet code 
public class TestAppletLAC extends Applet { 
    private Button button1; 

    public void paint(Graphics g) { 
    // Draw a rectangle width=250, height=100 
    g.drawRect(0, 0, 500, 100); 
    // Set the color to blue 
    g.setColor(Color.blue); 
    g.drawString("Major version: " + System.getProperty("java.version"),10,50); 

    String test = new VersionDependent().version(); 

    if(test == null){ 
     g.drawString("VersionDependent.version is null",10,70); 
    } else { 
     String a = "VersionDependent.version is not null. Output: " + test; 
     g.drawString(a,10,90); 
    } 

    } 

    public void init() { } 
} 

अंत में, यहां HTML फ़ाइल है जो परीक्षण एप्लेट जेएआर और बहु-रिलीज JAR का उपयोग करती है:

<HTML> 
    <HEAD> 
    <TITLE></TITLE> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 
    </HEAD> 
    <BODY topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"> 

    <applet codebase="." mayscript="true" width="100%" height="100%"  codebase_lookup="false" START_BACKGROUND="65A0EA" END_BACKGROUND="2F63AC"  code="appletExample.TestAppletLAC" archive="mr.jar,testAppletLAC.jar"  name="FxApplet"> 
     <param name="separate_jvm" value="true"/><param name="java_arguments"  value="-Djnlp.packEnabled=false"/><param name="codebase_lookup" value="false"/> 
    </applet> 
</HTML> 

जब मैं कमांड लाइन से चलाता हूं, उचित जावा 9 कक्षा का आह्वान किया जाता है।

नए अद्यतन: (चौड़ाई और ऊंचाई से "%" बाहर लेने के बाद) जब मैं html फ़ाइल पर appletviewer का उपयोग करें, उचित जावा 9 वर्ग शुरू हो जाती है।

एक और नया अद्यतन: एक सह कार्यकर्ता एप्लेट परिवर्तित क्लाइंट पर स्थानीय स्तर पर एक JNLP फ़ाइल का उपयोग करने, और गलत जावा वर्ग लागू किया गया था। लेकिन जब उसने रिमोट सर्वर पर इंगित करने के लिए स्थानीय जेएनएलपी फ़ाइल में कोडबेस फ़ील्ड बदल दिया, तो संसाधन सर्वर से डाउनलोड किए गए और उचित जावा 9 कक्षा का आह्वान किया गया।

किसी को भी मुझे इस मुद्दे के साथ मदद कर सकते हैं? मैं समस्या का निवारण कैसे कर सकता हूं? मैं "काम करने वाले मामलों" और "असफल मामलों" के लिए जावा कंसोल आउटपुट पोस्ट कर सकता हूं अगर इससे मदद मिलेगी। मैंने यहां एक बग रिपोर्ट बनाने का अनुरोध किया है: http://bugreport.java.com
मैं एक स्वत: आंतरिक समीक्षा आईडी दिया गया था: 9051408

नए अद्यतन: ओरेकल अब समस्या को पुन: कर सकते हैं और इस मुद्दे बनाया है: https://bugs.openjdk.java.net/browse/JDK-8191541

और यहाँ हैं जावा 9 और पूर्व जावा VersionDependent के 9 कार्यान्वयन:

package com.emc.demo; 

/** 
* This is the Java 9 version of the class `VersionDependent`. 
*/ 
public class VersionDependent { 
    public String version() { 
    return "Java 9 version"; 
    } 
} 

package com.emc.demo; 

/** 
    * This is the pre Java 9 version of the class `VersionDependent`. 
    */ 
public class VersionDependent { 
    public String version() { 
    return "Java 8 or earlier version"; 
    } 
} 
+0

'संस्करण पर निर्भर' का कार्यान्वयन क्या है? और यदि आप विभिन्न जावा संस्करणों के साथ कमांड लाइन पर इन जारों तक पहुंचने का प्रयास करते हैं तो व्यवहार क्या है? – nullpointer

+0

इसके बारे में क्षमा करें, मैंने जानकारी को प्रश्न में ले जाया। –

+0

यह हमेशा कुछ गलत जैसा दिखता था। सुझाव देंगे कि आप वर्तमान अपडेट का जवाब दें। जब तक यह निश्चित रूप से हल नहीं हो जाता है। – nullpointer

उत्तर

2

ओरेकल अब reproduc कर सकते हैं ई जेडीके 9/9.0.1 के तहत समस्या और इस मुद्दे को #JDK-8191541 के तहत बनाया गया है जहां इसे वर्तमान अपडेट के लिए ट्रैक किया जा सकता है।

अद्यतन: JDK-8,191,541 #JDK-8192748 का डुप्लिकेट के रूप में चिह्नित किया गया है और JDK10 में तय किया जाएगा (2018 मार्च में जारी किया जाना निर्धारित)।

मैंने ओरेकल से पूछा है कि क्या वे जेडीके 9 को फिक्स पोर्ट करने की योजना बना रहे हैं।

अद्यतन 1/29/2018: ओरेकल ने बताया कि वे वापस जेडीके 9 को तय करने के लिए पोर्टिंग नहीं करेंगे।

अद्यतन: 2018/01/29: Oracle मुझे JDK 10 के शीघ्र रिहाई, जो ठीक है माना जाता है की ओर इशारा किया: http://jdk.java.net/10/ दुर्भाग्य से, जब मैं जावा JDK 10 के साथ एक ही मल्टी रिहाई जार परीक्षण करने की कोशिश की ईए, समस्या बनी हुई है। मैं जेडीके 10 ईए के खिलाफ इस बार एक और बग प्रविष्टि बना रहा हूं।

यदि कोई समाधान या वर्कअराउंड होता है तो मैं एक और अपडेट पोस्ट करूंगा।

संबंधित मुद्दे