सक्रिय JDK में JavaFX परिनियोजन लाइब्रेरी नहीं मिली




netbeans java-11 (2)

मैं OpenJDK 11 और OpenJFX 11 की ओर पलायन कर रहा हूं। मैंने सफलतापूर्वक दोनों स्रोत से निर्माण किया है, और OpenJFX के अनुसार wiki ने --with-import-मॉड्यूल = [path_to_modular_sdk] का उपयोग JDK के निर्माण के लिए किया। जब तक मैं Apache Netbeans 9 में एक सरल "हैलो वर्ल्ड" परीक्षण परियोजना बनाने की कोशिश नहीं करता, तब तक सब कुछ ठीक हो जाता है; इस बिंदु पर मुझे निम्नलिखित त्रुटि मिलती है: " JavaFX परिनियोजन लाइब्रेरी सक्रिय JDK में नहीं मिली है "। इस पर जानकारी खोजने की कोशिश की लेकिन कुछ भी प्रासंगिक नहीं मिला। अगर कोई इस पर प्रकाश डाल सकता है तो इससे मुझे बहुत सराहना मिलेगी। किसी भी मदद के लिए धन्यवाद। पैट्रिक।


आप कहते हैं कि आप OpenJDK11 / OpenJFX11 की ओर पलायन कर रहे हैं, लेकिन आप स्वयं JDK और JFX दोनों का निर्माण करके इस प्रयास को क्यों शुरू करते हैं? यह बहुत आसान होगा कि आप यहाँ से एक ईए बिल्ड डाउनलोड करें http://jdk.java.net/11/ और यहाँ http://jdk.java.net/openjfx/ , इसके अलावा, JDK11 JavaFX से शुरू नहीं होता है जेडीके अब, इसलिए इसे जेडीके से अलग से बनाया जा सकता है। मुझे यकीन नहीं है कि आपके निर्माण निर्देश अद्यतित हैं।


जैसा कि @mipa बताते हैं, आपको अपने मौजूदा प्रोजेक्ट्स को माइग्रेट करने के लिए न तो Java 11 और न ही JavaFX 11 बनाने की आवश्यकता है।

Apache NetBeans 9.0 के लिए, JavaFX प्रोजेक्ट के लिए वर्तमान चींटी बिल्ड फाइलें अभी तक JavaFX 11 का समर्थन नहीं करती हैं। यह हमेशा जावाएफएक्स जार की तलाश में है, और यह तब मिल जाएगा जब यह नहीं मिलेगा। यह किसी तरह पुराने दिनों (जावा 8 से पहले) से विरासत है, जब JavaFX JDK का हिस्सा नहीं था और आपको जार को मैन्युअल रूप से जोड़ना था।

उदाहरण के लिए, जब आप एक नया JavaFX प्रोजेक्ट बनाने का प्रयास करते हैं, तो आपको यह त्रुटि मिलेगी:

लेकिन इसका मतलब यह नहीं है कि आप नेटफिन 9.0 के साथ या उसके बिना जावाएफ़एक्स 11 नहीं चला सकते हैं।

टर्मिनल पर चल रहा है

आप अपने Java / JavaFX 11 प्रोजेक्ट को टर्मिनल से चला सकते हैं। आप इस कदम के लिए एक विस्तृत कदम के लिए शुरू हो रही गाइड का पालन कर सकते हैं।

संक्षेप में, आप सभी की जरूरत है:

export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX

HelloFX.java कहाँ है:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String version = System.getProperty("java.version");
        Label l = new Label ("Hello, JavaFX 11, running on " + version);
        Scene scene = new Scene(new StackPane(l), 300, 200);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

मॉड्यूलर प्रोजेक्ट

NetBeans 9.0 पर एक मॉड्यूलर प्रोजेक्ट बनाएं, और एक मॉड्यूल जोड़ें (सादगी के लिए मैंने इसे javafx11 नाम दिया है, जो अनुशंसित नाम नहीं है)।

कोड जोड़ने से पहले, आइए मॉड्यूल-पथ पर JavaFX लाइब्रेरी जोड़ें।

यह लाइब्रेरी JavaFX के मेरे स्थानीय डाउनलोड के तहत सिर्फ फ़ोल्डर है: /Users/<user>/Downloads/javafx-sdk-11/lib/ । बेशक, यदि आपने इसे स्वयं बनाया है, तो आप इसके स्थान पर इंगित कर सकते हैं।

अब मैं मॉड्यूल को परिभाषित कर सकता हूं:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

और javafx11 पैकेज में उपरोक्त HelloFX वर्ग जोड़ें।

अब परियोजना पूरी तरह से ठीक चलेगी।

यहां तक ​​कि अगर आप अभी भी ant का उपयोग कर रहे हैं, तो इस मामले में, बिल्ड फाइलें मॉड्यूल-पथ परिवर्तनों के लिए अपडेट की जाती हैं, और जावाएफएक्स विशिष्ट कुछ भी नहीं है, इसलिए परियोजना बिना किसी समस्या के चलती है।

जावा परियोजना

यदि मॉड्यूलर प्रोजेक्ट काम करता है, तो एक नियमित जावा प्रोजेक्ट नेटबियंस 9.0 पर भी काम करेगा।

एक जावा प्रोजेक्ट (फिर से, एक JavaFX प्रोजेक्ट नहीं) बनाएं, ऊपर दिए गए मॉड्यूल-पथ में JavaFX लाइब्रेरी जोड़ें और अब आपको संकलन और चलाने के लिए इन VM विकल्पों को जोड़ना होगा:

 --module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls

प्रोजेक्ट ठीक चलना चाहिए।

Maven

एक और दृष्टिकोण चींटी के बजाय मावेन या ग्रैडल का उपयोग कर रहा है।

बस एक Maven -> JavaFX प्रोजेक्ट बनाएं, pom.xml फ़ाइल को संशोधित करें और JavaFX निर्भरताएं जोड़ें:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11-ea+23</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11-ea+23</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>11</release>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1.1</version>
                    <!--  Use newer version of ASM  -->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>javafx11.HelloFX</mainClass>
                </configuration>
        </plugin>
    </plugins>
</build>

NetBeans से क्लीन, बिल्ड और रन, यह ठीक काम करना चाहिए।

ग्रैडल के लिए, वही किया जा सकता है, यदि आप NetBeans के लिए ग्रैडल प्लगइन शामिल करते हैं।