所以,我编写了自己的后端并将其转换为工件(依赖项)。 dependecy包含三个.json文件。它的目录树如下:
/resources/
/com/
/META-INF/
现在,当我尝试将依赖项作为库添加到另一个项目(访问方法等)时,会抛出此消息:
java.io.FileNotFoundException: C:\Users\Yasin\Desktop\LeagueLookup\data\deps\resources\masteries.json (The system can not find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
这是依赖项中的代码:
public static String PROJECT_ROOT_DIR = new File(Config.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParent();
public static String RESOURCES = PROJECT_ROOT_DIR + "/resources/";
public static File MASTERIES = new File(RESOURCES + "masteries.json");
这是我在依赖项
中Sysout PROJECT_ROOT_DIR路径时的结果C:\Users\Yasin\Desktop\Riot-API\out\production
当我在后端创建一个类并在其上运行代码时,一切都运行得很好,但是当我尝试将该依赖项用于另一个项目时,一切都搞砸了。
我也使用它的真实路径
它看起来像这样:C:\Users\Yasin\Desktop\LeagueLookup\data\deps\main.jar\resources\masteries.json
但是这也不起作用(我在某处读到了使用InputStream,试过了,但它总是给我null,尽管路径非常好) 我的目标: 我想让API使用它自己的数据,我不想从其他来源获取数据,而是我自己的来源。
希望你能帮助我
答案 0 :(得分:1)
您可能误解了java应用程序是如何构建的。
编写java-applications(主要是)会产生JAR文件,这些文件可以在任何地方执行。如果您需要访问存储在生成的JAR文件中的某些文件(请使用maven或gradle之类的东西),您可以使用一些InputStream。您通过@model SelectList
<!-- Replace this with the display code you prefer -->
<div class="select-list">@Model.ToString()</div>
进行处理是错误的,因为有关源代码的信息可能会从已编译的Config.class.getProtectionDomain().getCodeSource().getLocation().getPath()
文件中删除,特别是在共享/运送您的应用程序时会有所不同。
为了在jar文件中包含一些存储文件的InputStream,你可以使用它:
.class
由于“资源”不是jar内部的默认结构,您可能需要仔细检查jar文件中的内容。