java - 无法将 ND4j 遮蔽到罐子中
问题描述
所以,我一直在尝试将 deeplearning4j(DL4j) 集成到我的 Minecraft 插件中,到目前为止进展顺利。我唯一的问题是遮蔽到罐子里。我成功地在其中隐藏了 dl4j,但似乎无法将 nd4j 放入其中,这是 dl4j 工作所需的库。任何帮助或建议将不胜感激。我也尝试过 Maven-assembly,但没有奏效。
错误:
[10:54:34] [Server thread/ERROR]: Error occurred while enabling AIAC v1.0 (Is it up to date?)
java.lang.ExceptionInInitializerError
at org.datavec.api.util.ndarray.RecordConverter.toMinibatchArray(RecordConverter.java:198) ~[?:?]
at org.deeplearning4j.datasets.datavec.RecordReaderMultiDataSetIterator.next(RecordReaderMultiDataSetIterator.java:160) ~[?:?]
at org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator.next(RecordReaderDataSetIterator.java:377) ~[?:?]
at org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator.next(RecordReaderDataSetIterator.java:452) ~[?:?]
at org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator.next(RecordReaderDataSetIterator.java:85) ~[?:?]
at org.derock_antony.aiac.ai.Loader.<init>(Loader.java:35) ~[?:?]
at org.derock_antony.aiac.Main.onEnable(Main.java:25) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot.jar:git-Spigot-db6de12-18fbb24]
at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.s(MinecraftServer.java:414) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.k(MinecraftServer.java:378) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.a(MinecraftServer.java:333) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:263) [spigot.jar:git-Spigot-db6de12-18fbb24]
at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot.jar:git-Spigot-db6de12-18fbb24]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_201]
Caused by: java.lang.RuntimeException: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: http://nd4j.org/getstarted.html
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5131) ~[?:?]
at org.nd4j.linalg.factory.Nd4j.<clinit>(Nd4j.java:226) ~[?:?]
... 18 more
Caused by: org.nd4j.linalg.factory.Nd4jBackend$NoAvailableBackendException: Please ensure that you have an nd4j backend on your classpath. Please see: http://nd4j.org/getstarted.html
at org.nd4j.linalg.factory.Nd4jBackend.load(Nd4jBackend.java:218) ~[?:?]
at org.nd4j.linalg.factory.Nd4j.initContext(Nd4j.java:5128) ~[?:?]
at org.nd4j.linalg.factory.Nd4j.<clinit>(Nd4j.java:226) ~[?:?]
... 18 more
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>me.antony.aiac</groupId>
<artifactId>aiac</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.release>12</maven.compiler.release>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.derock_antony.aiac.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>8</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-core</artifactId>
<version>1.0.0-beta6</version>
</dependency>
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta6</version>
</dependency>
</dependencies>
</project>
解决方案
我设法通过更改库(nd4j)以不使用 Java 的 ServiceLoader 功能来解决这个问题(我遇到的不是 Minecraft Mod,而是 Slay The Spire mod)。
nd4j 库抛出的错误仅在找不到后端时才会抛出(它只尝试使用名为 ServiceLoaders 的 java 功能来实现,表面上它不能很好地与 modded minecraft 和 modded 完成的自定义类加载一起工作杀死尖顶)。
因此,只需更改库本身以对使用 ServiceLoaders 查找的内容进行硬编码即可解决问题。我不认为这是一个很好的解决方案,但考虑到修改后的 minecraft 发射器或修改后的 slay 尖顶发射器不太可能解决此问题,这是为您自己的 mod 修复它的一种方法。
推荐阅读
- r - 混合 ddply 和 interval 时出错
- python - 无法创建涉及其他功能的列表
- sql - 如何加快sql查询执行速度?
- vaadin - vaadin router litElement 项目中的更改页面
- iis - 如何在具有 SSR 优势的 IIS 上部署下一个 js 应用程序?
- elasticsearch - 用于查询 DSL 的 Elasticsearch Rest 客户端
- python - opencv-python 和 opencv-contrib-python 的区别
- typescript - 从枚举的 const 创建联合类型
- go - 如何检查响应标头是否包含某个字符串
- r - 如何对R中两个不相等向量的值求和?