【问题标题】:How to export JavaFX 11 Project into Jar?如何将 JavaFX 11 项目导出到 Jar 中?
【发布时间】:2020-09-08 13:35:27
【问题描述】:

我今天花了几个小时在谷歌上搜索大多数解决方案都已经过时了。 我在项目符合的 Window 上使用 eclipse,但如果没有:

java --module-path C:\javafx-sdk-11.0.2\lib\  --add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.web -jar Jar.jar

有哪些方法可以将 JavaFX 11 项目导出到可执行 jar 中,而无需在导出后将其链接到 javafx-sdk-11.0.2?

谢谢。

【问题讨论】:

标签: java javafx jar


【解决方案1】:

您可以使用 IDE 中的Maven 构建此项目,包括必要的依赖项:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11.0.2</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>11.0.2</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-graphics</artifactId>
    <version>11.0.2</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-web</artifactId>
    <version>11.0.2</version>
</dependency>

【讨论】:

    【解决方案2】:

    使用Maven 构建您的项目并使用那种pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>tld.group</groupId>
        <artifactId>artifact</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>artifact</name>
        <description>My artifact</description>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>11</java.version>
            <javafx.main.class>your.package.YourJavaFxAppMainClass</javafx.main.class>
            <main.class>your.package.YourMainClass</main.class>
        </properties>
        
        <dependencies>
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-controls</artifactId>
                <version>11.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-graphics</artifactId>
                <version>11.0.2</version>
                <classifier>win</classifier>
            </dependency>
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-fxml</artifactId>
                <version>11.0.2</version>
            </dependency>
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-web</artifactId>
                <version>11.0.2</version>
            </dependency>
        </dependencies>
        
        <build>
            <!-- Jar's final name -->
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <!-- Build source and target -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <compilerArgs>
                            <!--<arg>--add-modules=java.smartcardio</arg>-->
                        </compilerArgs>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <showDeprecation>true</showDeprecation>
                        <showWarnings>true</showWarnings>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.openjfx</groupId>
                    <artifactId>javafx-maven-plugin</artifactId>
                    <version>0.0.4</version>
                    <configuration>
                        <mainClass>${javafx.main.class}</mainClass>
                    </configuration>
                </plugin>
    
                <!-- Distributable archive building -->
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <!-- Main class -->
                                <mainClass>${main.class}</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <!--  Includes project's dependencies -->
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <appendAssemblyId>false</appendAssemblyId>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    

    您必须提供两个应用程序类。

    Javafx 之一:

    public class YourJavaFxAppMainClass extends javafx.application.Application {
    
        @Override
        public void start(Stage stage) throws IOException {
            // ...
        }
    
        public static void main(String[] args) {
            launch();
        }
        // ...
    }
    

    另一个用于从 IDE 运行程序(例如 IntelliJ):

    public class YourMainClass {
    
        public static void main(final String[] args) {
            YourJavaFxAppMainClass.main(args);
        }
    }
    

    然后您可以使用mvn clean package 打包您的jar 并使用java -jar target/artifact.jar 运行它。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2019-07-20
      • 1970-01-01
      • 2019-09-03
      • 2013-04-14
      • 2021-08-05
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      相关资源
      最近更新 更多