[英]“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.