首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“java.library.path中没有lwjgl”

“java.library.path中没有lwjgl”
EN

Stack Overflow用户
提问于 2014-10-23 06:41:25
回答 1查看 2.7K关注 0票数 3

在环顾四周和阅读其他类似的帖子时,我一直无法解决我一直把LWJGL作为一个依赖项的问题。我将尽量描述和提供尽可能多的信息,所以感谢您提前给出的回复。

目标:使用Maven 2 (M2E 1.5.0插件)创建一个依赖于Eclipse中LWJGL (Version2.9.1)的项目(版本:露娜服务第1版(4.4.1))。

到目前为止,我已经使用M2E在Eclipse中将我的项目设置为Maven项目。

在阅读了涉及Eclipse+Maven+LWJGL主题的各种文章/帖子之后,我设置了Eclipse+Maven+LWJGL,结果如下:

代码语言:javascript
复制
<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">

<!-- Supported POM Version -->
<modelVersion>4.0.0</modelVersion>

<!-- Project Information -->
<groupId>HIDDEN.GROUP.ID</groupId>
<artifactId>HIDDEN.ARTIFACT.ID</artifactId>
<version>0.1.0</version>
<name>HIDDEN.NAME</name>
<description>HIDDEN DESCRIPTION</description>

<!-- Build Properties -->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <lwjgl-version>2.9.1</lwjgl-version>
    <main>HIDDEN.MAIN.CLASS</main>
</properties>

<!-- Dependencies -->
<dependencies>
    <dependency>
        <groupId>org.lwjgl.lwjgl</groupId>
        <artifactId>lwjgl</artifactId>
        <version>${lwjgl-version}</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.lwjgl.lwjgl</groupId>
        <artifactId>lwjgl_util</artifactId>
        <version>${lwjgl-version}</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

<!-- Build Configuration -->
<build>
    <finalName>${project.name}</finalName>
    <defaultGoal>clean package</defaultGoal>
    <sourceDirectory>src</sourceDirectory>

    <!-- Resources -->
    <resources>
        <resource>
            <targetPath>.</targetPath>
            <directory>${basedir}/src/main/resources/</directory>
            <filtering>true</filtering>
            <includes>
                <!-- Include All HOCON Resources -->
                <include>*.config</include>
            </includes>
        </resource>
    </resources>

    <!-- Plugins -->
    <plugins>

        <!-- Maven Compiler -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <showDeprecation>true</showDeprecation>
            </configuration>
        </plugin>

        <!-- Maven Shader -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <includes>
                                <include>org.lwjgl.lwjgl:*</include>
                            </includes>
                        </artifactSet>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <manifestEntries>
                                    <Main-Class>${main}</Main-Class>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- Maven Natives -->
        <plugin>
            <groupId>com.googlecode.mavennatives</groupId>
            <artifactId>maven-nativedependencies-plugin</artifactId>
            <version>0.0.6</version>
            <executions>
                <execution>
                    <id>unpacknatives</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        com.googlecode.mavennatives
                                    </groupId>
                                    <artifactId>
                                        maven-nativedependencies-plugin
                                    </artifactId>
                                    <versionRange>
                                        [0.0.5,)
                                    </versionRange>
                                    <goals>
                                        <goal>copy</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

出于各种原因,我隐藏了上述pom.xml的某些部分(尽管它不应该影响对我的问题的诊断-只是把它放在那里,是的,所有上述隐藏的“字段”都是正确的类型和引用。虽然你认为这可能会引起问题,但一定要通知我,我会再检查一次)。

现在,<pluginManagement>...</pluginManagement>部分在以下情况下由Eclipse自动生成:

Eclipse said (屏幕截图): 生命周期配置中未涉及的插件执行: com.googlecode.mavennatives:maven-nativedependencies-plugin:0.0.6:copy (执行: unpacknatives本地程序,阶段:生成-资源)

通过单击以下命令,我试图解决的问题(似乎已经解决):

Eclipse said (屏幕截图): 将pom.xml中的目标副本永久标记为Eclipse中忽略的

然后在pom.xml中生成以下代码(如上面所示):

代码语言:javascript
复制
 <pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        com.googlecode.mavennatives
                                    </groupId>
                                    <artifactId>
                                        maven-nativedependencies-plugin
                                    </artifactId>
                                    <versionRange>
                                        [0.0.6,)
                                    </versionRange>
                                    <goals>
                                        <goal>copy</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

问题#1:

所以这就是我想要做的。我可以使用Project > Run As > Maven Build构建我的项目(目标:清洁包),对它我可以获得一个可执行的JAR文件,其中包含lwjgl.jar的内容、lwjgl_util.jar的内容,以及与JAR中隐藏的几个本机文件(屏幕截图)类似的内容,以便创建一个独立的可执行文件。

运行它时,它的位置很漂亮:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

好的,所以我知道java不知道系统属性java.library.path中的"lwjgl“。由于LWJGL调用系统属性java.library.path以定位本机库(正如我已经阅读过的这里),因此我相信现在必须获得系统运行此JAR文件到系统属性java.library.path所需的本机库的路径。

我能够让JVM通过windows命令提示符使用以下命令正确运行JAR文件:

java -Djava.library.path=\exact\path\to\lwjgl-2.9.1\native\windows -jar \exact\path\to\<project-name>\target\<project-name>.jar

这个跑得很好。尽管我做了,但不想手动指定本机文件的位置。理想情况下,我要寻找的是将本机文件嵌入JAR中(它们是部分的,但我有感觉它们不是全部),在运行时根据用户的操作系统进行选择,并简单地设置(关于如何这样做的建议/帮助是非常感谢的)。因此,可以将它们嵌入到我的JAR中名为“/本地/lwjgl/”的文件夹中。

问题2:

这个问题与第一个问题相同,尽管它不是由编译好的JAR引起的,而是在试图通过IDE (Eclipse)运行我的主类时引起的。

它会导致与上面相同的错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

不过,这里有不同之处。我知道一个解决这个问题的办法,它只需要简单地通过以下几个快速步骤:

  • 项目>构建路径>配置构建路径.
  • 点击“图书馆”选项卡。
  • 找到并选择"lwjgl.jar“依赖项..。
  • 打开它的下拉并选择“本机库位置:(无)”.
  • 点击“编辑”。
  • 使用与操作系统相对应的LWJGL本机文件夹的正确URI填写字段(在我的示例中是/本地/windows)
  • 完成了!

虽然我遇到的问题是因为我使用maven作为我的依赖管理工具,但是我的项目的构建路径(库)中的lwjgl.jar依赖项位于"Maven依赖项“(屏幕截图)下。

这使我无法设置URI。它只是没有被设置(或者只是没有保存)。所以我的问题是,我做错什么了吗?或者,由于使用maven (m2e插件),我必须采取另一种方法吗?

非常感谢你的阅读和帮助我解决我的任何一个问题!我把这两篇文章都放在这篇文章里,因为第二个问题基本上是第一个问题,但只是一个变化(大概),所以我觉得做两个帖子是没有用的。我知道这可能是许多的重复,但我无法找到与我的特定情况相对应的帮助。如果你需要任何细节或信息,特别是我遗漏了,或你觉得我应该详细说明,请问,我会非常愿意提供。

编辑#1:

通过向项目的运行配置(屏幕截图)中添加VM参数“-Djava.Library ary.path=目标值/本机”解决了问题#2。

尽管我仍然存在无法执行编译好的JAR的问题(我想普遍地解决这个问题,而不是专门针对我的机器,因为这将最终分发给Windows/Mac/Linux消费者)。

编辑#2 (2014年10月29日-东部时间下午6:30):

我已经能够创建批处理文件来运行程序,尽管这显然是依赖于平台的,而不是我想要的。对于获得系统属性集的任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2014-10-23 07:26:30

正如您已经发现的,当您的IDE无法定位lwjgl的本地用户时,就会发生这种情况。

如果你还没有那么做的话,我想建议你遵循这些的步骤。这都取决于您的pom.xml和您的java.library.path配置!

如果这不起作用,我可以尝试排除更多的故障。然而,就我而言,它解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26522553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档