在环顾四周和阅读其他类似的帖子时,我一直无法解决我一直把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,结果如下:
<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中生成以下代码(如上面所示):
<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。
不过,这里有不同之处。我知道一个解决这个问题的办法,它只需要简单地通过以下几个快速步骤:
虽然我遇到的问题是因为我使用maven作为我的依赖管理工具,但是我的项目的构建路径(库)中的lwjgl.jar依赖项位于"Maven依赖项“(屏幕截图)下。
这使我无法设置URI。它只是没有被设置(或者只是没有保存)。所以我的问题是,我做错什么了吗?或者,由于使用maven (m2e插件),我必须采取另一种方法吗?
非常感谢你的阅读和帮助我解决我的任何一个问题!我把这两篇文章都放在这篇文章里,因为第二个问题基本上是第一个问题,但只是一个变化(大概),所以我觉得做两个帖子是没有用的。我知道这可能是许多的重复,但我无法找到与我的特定情况相对应的帮助。如果你需要任何细节或信息,特别是我遗漏了,或你觉得我应该详细说明,请问,我会非常愿意提供。
编辑#1:
通过向项目的运行配置(屏幕截图)中添加VM参数“-Djava.Library ary.path=目标值/本机”解决了问题#2。
尽管我仍然存在无法执行编译好的JAR的问题(我想普遍地解决这个问题,而不是专门针对我的机器,因为这将最终分发给Windows/Mac/Linux消费者)。
编辑#2 (2014年10月29日-东部时间下午6:30):
我已经能够创建批处理文件来运行程序,尽管这显然是依赖于平台的,而不是我想要的。对于获得系统属性集的任何帮助都将不胜感激。
发布于 2014-10-23 07:26:30
正如您已经发现的,当您的IDE无法定位lwjgl的本地用户时,就会发生这种情况。
如果你还没有那么做的话,我想建议你遵循这些的步骤。这都取决于您的pom.xml和您的java.library.path配置!
如果这不起作用,我可以尝试排除更多的故障。然而,就我而言,它解决了这个问题。
https://stackoverflow.com/questions/26522553
复制相似问题