用maven打包时我似乎遇到了org/lwjgl/glfw/GLFW的问题

问题描述 投票:0回答:1

我正在使用 maven 编译和打包我的程序,它编译和打包时没有任何错误,当我从命令行运行我的 jar 时,UI 加载良好,但是当我按下播放按钮时,我收到错误: “Thread-0”java.lang.NoClassDefFoundError:org/lwjgl/glfw/GLFW 在 gameGraphics.GraphicsDisplay.init(GraphicsDisplay.java:54).

我使用 Eclipse 作为 IDE,并有一个 Maven 项目。 UI 使用 Swing 进行编码。 UI.png 我创建了一个名为 GraphicsDisplay 的类,它使用 LWJGL 创建我的 GLFW 窗口: GLFW 窗口(GrapicksDisplay 类) 当我按下 UI 中的播放按钮时,会调用 Graphics 显示类,并在单独的线程上运行。

所以当我在 Eclipse 中运行我的程序时,一切都正常......很好 当我使用 Eclipse 导出导出程序并将源文件夹与可运行文件放在一起时,一切正常。 当我执行 Maven clean、编译和打包时,UI 工作正常,但是当我按下播放按钮时,出现上述错误: “Thread-0”java.lang.NoClassDefFoundError:org/lwjgl/glfw/GLFW 在 gameGraphics.GraphicsDisplay.init(GraphicsDisplay.java:54).

这是我的 pom.xml:

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"> 4.0.0

<groupId>nhvdr</groupId>
<artifactId>javaSwingBuild_2D</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>javaSwingBuild_2D</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
    <lwjgl.version>3.3.4</lwjgl.version>
    <joml.version>1.10.7</joml.version>
    <lwjgl3-awt.version>0.1.8</lwjgl3-awt.version>
    <steamworks4j.version>1.9.0</steamworks4j.version>
    <steamworks4j-server.version>1.9.0</steamworks4j-server.version>
    <joml-primitives.version>1.10.0</joml-primitives.version>
    <lwjgl.natives>natives-windows</lwjgl.natives>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.lwjgl</groupId>
            <artifactId>lwjgl-bom</artifactId>
            <version>${lwjgl.version}</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-glfw</artifactId>
    </dependency>

    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-opengl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-opengles</artifactId>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-stb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl</artifactId>
        <classifier>${lwjgl.natives}</classifier>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-glfw</artifactId>
        <classifier>${lwjgl.natives}</classifier>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-opengl</artifactId>
        <classifier>${lwjgl.natives}</classifier>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-opengles</artifactId>
        <classifier>${lwjgl.natives}</classifier>
    </dependency>
    <dependency>
        <groupId>org.lwjgl</groupId>
        <artifactId>lwjgl-stb</artifactId>
        <classifier>${lwjgl.natives}</classifier>
    </dependency>
    <dependency>
        <groupId>org.joml</groupId>
        <artifactId>joml</artifactId>
        <version>${joml.version}</version>
    </dependency>
    <dependency>
        <groupId>org.lwjglx</groupId>
        <artifactId>lwjgl3-awt</artifactId>
        <version>${lwjgl3-awt.version}</version>
    </dependency>
    <dependency>
        <groupId>com.code-disaster.steamworks4j</groupId>
        <artifactId>steamworks4j</artifactId>
        <version>${steamworks4j.version}</version>
    </dependency>
    <dependency>
        <groupId>com.code-disaster.steamworks4j</groupId>
        <artifactId>steamworks4j-server</artifactId>
        <version>${steamworks4j-server.version}</version>
    </dependency>
    <dependency>
        <groupId>org.joml</groupId>
        <artifactId>joml-primitives</artifactId>
        <version>${joml-primitives.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>nhvdr.javaSwingBuild.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我可能会错过什么?

java swing lwjgl glfw
1个回答
0
投票

您的

pom.xml
文件基本正确。它只是未能构建一个“胖罐子”。当使用 7zip 打开 Maven 时,您可以看到 Maven 正在生成一个瘦小的 jar,因为存档中不包含 LWJGL 文件。 用这两个替换你的插件来构建一个胖罐子:

<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>11</release> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>nhvdr.javaSwingBuild.Main</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>assemble-all</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins>

构建时,将创建两个 jar。标有
[your_jar_name]-jar-with-dependencies.jar

的就是胖罐子。该解决方案基于

这个关于使用 Maven 构建 fat jar 的 StackOverflow 线程。
请注意,生成的 fat jar 只能在 Windows 计算机上运行

,因为您仅在

LWJGLcustomize 站点上选择了 windows-x64 的本机。如果您希望您的 fat jar 在每台计算机上运行,请在 LWJGL 自定义网站 上,您必须: 在“模式”类别下选择“Maven”

    在“Natives”下选择您想要支持的所有平台
  1. 下载新文件并相应更新当前的
  2. pom.xml
  3. 文件。
  4. 进行此更改后,您无需更新
  5. plugins
下的任何内容。

	

© www.soinside.com 2019 - 2024. All rights reserved.