簡體   English   中英

“ java.library.path中沒有lwjgl”

[英]“no lwjgl in java.library.path”

在環顧四周並閱讀其他類似文章時,我一直無法解決將LWJGL作為依賴項所遇到的問題。 我會盡力做到描述性和信息性,因此,感謝您提前提出答復。

目標:使用Maven 2( M2E 1.5.0插件 )在Eclipse( 版本:Luna Service Release 1(4.4.1) )中創建依賴於LWJGL( 2.9.1 )的項目。

到目前為止,我已經設置我的Eclipse項目為使用M2E Maven項目。

在閱讀了涉及Eclipse + Maven + LWJGL主題的各種文章/文章之后,我已經設置了pom.xml ,結果如下:

<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某些部分(盡管它不會影響我的問題的診斷-只是將其放在那里,是的,所有上述隱藏的 “字段”都是正確鍵入和引用的。認為這可能會導致問題,請通知我,我會再次檢查)。

現在,Eclipse在以下情況下自動生成<pluginManagement>...</pluginManagement>部分:

Eclipse說( 截圖 ):

生命周期配置未涵蓋插件執行:com.googlecode.mavennatives:maven-nativedependencies-plugin:0.0.6:copy(執行:unpacknatives,階段:generate-resources)


我嘗試通過以下方法解決(似乎已解決)的問題:

Eclipse說( 截圖 ):

將pom.xml中的目標副本永久標記為在Eclipse構建中被忽略


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

 <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來構建我的項目(目標:干凈的程序包),並獲得一個包含lwjgl.jar的內容, lwjgl_util.jar的內容以及外觀的可執行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

我可以通過Windows命令提示符使用以下命令來使JVM正確運行我的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中名為“ / natives / lwjgl /”的文件夾下。


問題2:

這個問題與第一個問題相同,盡管它不是由已編譯的JAR引起的,而是嘗試通過IDE(Eclipse)運行主類時引起的。

它導致與上述相同的錯誤:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

現在,這就是區別。 我知道解決此特定問題的方法,它只需完成以下快速步驟即可:

  • 項目>構建路徑>配置構建路徑...

  • 點擊“庫”標簽...

  • 找到並選擇“ lwjgl.jar”依賴項...

  • 打開它的下拉菜單,然后選擇“本地庫位置:(無)” ...

  • 點擊“編輯” ...

  • 在正確的URI字段中填寫與您的操作系統相對應的LWJGL的natives文件夾(在我的情況下是/ natives / windows)

  • 完成!

盡管發生問題的原因是因為我將maven用作依賴項管理工具,但我的項目的構建路徑(庫)中的lwjgl.jar依賴項位於“ Maven Dependencies ”下( 屏幕截圖 )。

這使我無法設置URI。 它只是沒有設置(或只是不保存)。 所以我的問題是,我做錯了什么嗎? 還是由於使用Maven(m2e插件)而必須采取另一種方法?


非常感謝您閱讀和幫助我解決我的任何一個問題! 我把這兩個問題都放在了這兩個職位上,因為第二個問題基本上是第一個,但只是一個變體(排序),所以我覺得寫兩個職位將毫無用處。 我知道這可能是許多其他產品的復制品,但是我找不到適合於我的特定情況的幫助。 如果您特別需要我遺漏的任何細節或信息,或者您覺得我應該詳細說明,請詢問,我將樂意提供。


編輯#1:

通過將VM參數“ -Djava.library.path = target / natives”添加到項目的運行配置( 屏幕截圖 ),解決了問題2。

盡管仍然存在無法執行已編譯JAR的問題(我想普遍解決該問題,而不是專門針對我的機器,因為最終將分發給Windows / Mac / Linux用戶)。

編輯2(2014年10月29日-美國東部標准時間下午6:30):

我已經能夠創建批處理文件來運行該程序,盡管這顯然取決於平台,而不是我想要的。 任何獲得系統屬性集的幫助將不勝感激。

正如您已經發現的那樣,當您的IDE無法找到lwjgl的本機時,就會發生這種情況。

如果您還沒有這樣做,我建議您遵循以下步驟。 這完全取決於您的pom.xml和您對java.library.path的配置!

如果這不起作用,我可以嘗試解決更多問題。 但是就我而言,它解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM