我的项目根目录中有编程游戏“ Robocode”,因此我可以在任何地方运行该项目,而无需将其安装在C:/ robocode中。我有一个带有以下选项的运行配置;
主类:robocode.Robocode
虚拟机选项:-Xmx512M -Dsun.io.useCanonCaches = false -Ddebug = true -DNOSECURITY = true -cp libs / robocode.jar
工作目录:MY_ROOT \ robocode_master
JRE:默认(9.0.1-我的主模块的SDK)
我正在为AdvancedRobot编写一些自定义功能,该功能将连接到MongoDBAtlas集群以获取必要的数据。我正在使用mongo-java-driver-3.6.1。 .jar已作为库添加到IntelliJ,然后作为对主模块的编译依赖项。在测试中效果很好,我可以下载文档等。
为了说明,这些库在此处显示在“项目结构”窗格中。
我已将编译输出路径设置为robocode_master / robots目录,以便从IntelliJ运行Robocode时,它将在正确的目录中看到自定义robot .class文件,并允许我将它们添加到战斗中。
问题是当我开始战斗时,机器人试图做它需要做的事情,它抛出java.io.FileNotFoundException并试图从robocode_master / robots目录中查找必要的库文件。
例如,它要做的第一件事就是连接到数据库。
java.io.FileNotFoundException: MY_ROOT\robocode_master\robots\com\mongodb\MongoClient.class (The system cannot find the path specified)
当我将项目输出路径设置为robots文件夹时,启动Robocode时,它将引发一堆FileNotFoundExceptions。但是,如果我将选项切换为“继承项目编译输出路径”,然后启动Robocode,则启动时不会出现异常。但是现在当然了,我的机器人不在默认目录中,因此看不到它们。因此,我将out / production / ...中的新路径添加到GUI中的Robocode并重新启动,然后从机械手获得相同的异常。现在,它尝试在out / production /.../ com / mongodb / MongoClient.class中查找文件
如何“告诉” Robocode在类路径的默认位置查找库?
最佳答案
Robocode将在/ robots文件夹中查找机器人类。如果您的机器人位于其他地方,则需要通过设置Developments Options来告诉Robocode从Robocode UI中找到这些机器人的位置。 Robocode拥有自己的类加载器,用于加载机器人类-但只有机器人类。
必须使用Java命令(VM选项)的-cp或-classpath在Robocode的普通类路径上指定其他类/库,就像对任何其他Java应用程序所做的一样。
还要注意,您应该使用Robocode随附的VM Options-类似于robocode.bat文件中指定的选项。尤其是当您使用Java 9或更高版本时:
java -Xmx512M -cp libs/robocode.jar -XX:+IgnoreUnrecognizedVMOptions "--add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED" "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED" "--add-opens=java.desktop/sun.awt=ALL-UNNAMED" robocode.Robocode %*
您可以将其复制到“ run_my_stuff.bat”中,然后在libs / robocode.jar之后将内容添加到-cp中。
但是,我不确定它是否可以与Mongo驱动程序一起使用。 Robocode是为简单的机器人构建的,这些机器人只能访问有限的资源,例如CPU周期,文件访问等。
关于java - 运行时机器人无法找到Robocode库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49094453/