java - LWJGL 使用 GitLab CI 构建

标签 java lwjgl gitlab-ci

我一直在尝试让 GitLab CI 构建我的 LWJGL 项目,但没有成功,经过大约一个小时的修补,我将其作为我的 .gitlab-ci.yml:

image: java:8-jdk
buildtest:
 script:
 - mkdir bin
 - javac -cp dependencies/lwjgl/lwjgl.jar -d bin/ src/*.java
 - cd bin
 - java HelloWorld

然而,在最终让它正确编译之后,当需要运行代码时,它会得到以下日志:

$ mkdir bin
$ javac -cp dependencies/lwjgl/lwjgl.jar -d bin/ src/*.java
$ cd bin
$ java HelloWorld
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/glfw/GLFWKeyCallback
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.lwjgl.glfw.GLFWKeyCallback
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more

ERROR: Build failed: exit code 1

在我看来它找不到 org.lwjgl.glfw.GLFWKeyCallback,但是在本地编译时它工作正常。所以我无法弄清楚问题是什么,有什么想法吗?

编辑:

再弄乱这个之后,我最终在我的机器上尝试了这个,下面的命令提示符下工作,但不是在 shell 脚本中,因为 GitLab CI 使用 linux,它在那里也不起作用。 这是我快速编写的用于测试新错误的 shell 脚本:

mkdir bin
javac -cp dependencies/lwjgl/lwjgl.jar -d bin/ src/*.java
cd bin
java -cp ../dependencies/lwjgl/lwjgl.jar; -Dorg.lwjgl.librarypath=../dependencies/lwjgl/native/ HelloWorld

错误(我知道它对 java.exe 的用法,但它会在最后打印出它和错误):

Usage: java [-options] class [args...]
       (to execute a class)
   or  java [-options] -jar jarfile [args...]
       (to execute a jar file)
where options include:
-d32          use a 32-bit data model if available
-d64          use a 64-bit data model if available
-server       to select the "server" VM
              The default VM is server.

-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
              A ; separated list of directories, JAR archives,
              and ZIP archives to search for class files.
-D<name>=<value>
              set a system property
-verbose:[class|gc|jni]
              enable verbose output
-version      print product version and exit
-version:<value>
              Warning: this feature is deprecated and will be removed
              in a future release.
              require the specified version to run
-showversion  print product version and continue
-jre-restrict-search | -no-jre-restrict-search
              Warning: this feature is deprecated and will be removed
              in a future release.
              include/exclude user private JREs in the version search
-? -help      print this help message
-X            print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
              enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
              disable assertions with specified granularity
-esa | -enablesystemassertions
              enable system assertions
-dsa | -disablesystemassertions
              disable system assertions
-agentlib:<libname>[=<options>]
              load native agent library <libname>, e.g. -agentlib:hprof
              see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
              load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
              load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
              show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
bash: -Dorg.lwjgl.librarypath=../dependencies/lwjgl/native/: No such file or directory

我知道这个目录确实存在,因为我可以在命令提示符下以下列方式让它工作:

javac -cp dependencies/lwjgl/lwjgl.jar -d bin/ src/*.java
cd bin
java -cp ../dependencies/lwjgl/lwjgl.jar; -Dorg.lwjgl.librarypath=../dependencies/lwjgl/native/ HelloWorld

命令提示符版本的输出:

E:\test\bin>java -cp ../dependencies/lwjgl/lwjgl.jar; -Dorg.lwjgl.librarypath=../dependencies/lwjgl/native/ HelloWorld
Hello LWJGL 3.0.0b SNAPSHOT!

E:\test\bin>

最佳答案

您必须将库路径设置为包含 native 文件的文件夹。

java -Dorg.lwjgl.librarypath=path/to/natives HelloWorld

您可以在native中找到文件(以.so.dylib.dll结尾) code> LWJGL zip 文件的文件夹。

关于java - LWJGL 使用 GitLab CI 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733746/

相关文章:

java - 游戏循环 - 时间计算

python - 杀死 python 后台进程 gitlab-ci

java - :if statement in Thymeleaf 的 OR 条件

java - 主脑游戏if语句问题

java - 连接池监控

java - OpenGL 3.2 纹理不显示

java - LWJGL wiki 上的示例代码因 GL_INVALID_OPERATION 失败

docker - GitLab管道未在脚本部分中为Docker镜像执行命令

nginx - 带有 nginx 代理的 Gitlab 8 无法下载 zip,将公共(public)仓库克隆为访客,也无法在 CI 中构建

java - 硬件支持 HAL 太慢,只能写入 720 帧中的 0