JAR 在运行时在 JAR(本身)内部或外部查找资源文件?
JAR, when runs, looks for resource files inside the JAR (itselfe) or outside?
一个java程序使用不同的文件,存储在路径"src/main/resources/files/files.drl"下。
如果我将这个程序导出为 运行-able JAR 和 运行 这个 JAR,它会在 JAR 中寻找这些文件还是在文件夹 src->main- 之外寻找>资源->文件 ?
Java 程序如何使用这些文件的示例代码是:
drlFileName = "./src/main/resources/files/files.drl";
FileInputStream fis = null;
fis = new FileInputStream(drlFileName);
kbuilder.add( ResourceFactory.newInputStreamResource(fis), ResourceType.DRL);
在大多数情况下,您打包应用程序的方式并不能决定它将在何处找到其资源。它会在您指定的任何目录中查找。如果您通过使用各种 jar 文件 API(例如 java.util.jar.JarFile
)指定了一个 jar 文件,那么您的程序将在该目录中找到其数据。如果您查看 OS 的文件系统(例如使用 java.io.FileInputStream
之类的东西),那么它会在那里找到它的数据。
例外情况是当您使用 ClassLoader::getResource
时,它将搜索您的类路径以找到指定的资源。因此,例如,如果您的类路径指向单个 jar 文件,则只会在该 jar 文件中查找资源。请注意,如果您使用自定义 ClassLoader 实现,则可以搜索其他位置——URL、非类路径 paths/jarfiles 等。基本上,自定义 ClassLoader 可以使用任何可能的字节源来查找资源——它将取决于 ClassLoader 的设计目的。
一个java程序使用不同的文件,存储在路径"src/main/resources/files/files.drl"下。 如果我将这个程序导出为 运行-able JAR 和 运行 这个 JAR,它会在 JAR 中寻找这些文件还是在文件夹 src->main- 之外寻找>资源->文件 ?
Java 程序如何使用这些文件的示例代码是:
drlFileName = "./src/main/resources/files/files.drl";
FileInputStream fis = null;
fis = new FileInputStream(drlFileName);
kbuilder.add( ResourceFactory.newInputStreamResource(fis), ResourceType.DRL);
在大多数情况下,您打包应用程序的方式并不能决定它将在何处找到其资源。它会在您指定的任何目录中查找。如果您通过使用各种 jar 文件 API(例如 java.util.jar.JarFile
)指定了一个 jar 文件,那么您的程序将在该目录中找到其数据。如果您查看 OS 的文件系统(例如使用 java.io.FileInputStream
之类的东西),那么它会在那里找到它的数据。
例外情况是当您使用 ClassLoader::getResource
时,它将搜索您的类路径以找到指定的资源。因此,例如,如果您的类路径指向单个 jar 文件,则只会在该 jar 文件中查找资源。请注意,如果您使用自定义 ClassLoader 实现,则可以搜索其他位置——URL、非类路径 paths/jarfiles 等。基本上,自定义 ClassLoader 可以使用任何可能的字节源来查找资源——它将取决于 ClassLoader 的设计目的。