Jer*_*rth 8 java eclipse processing jar embedded-resource
首先,我已经阅读了很多关于这个主题的SO问题,我已经尝试了其中提出的建议.
这是我的情况.我正在使用Processing框架编写Java应用程序,我正处于最后阶段,我需要开始考虑打包应用程序.可以从命令行执行的jar文件是我尝试使用Eclipse中的Export功能构建的.
我的项目结构如下:
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
Run Code Online (Sandbox Code Playgroud)
当我导出jar文件并用uzip jar来检查它的内容时,我发现这些目录的内容已被转储到.jar的顶层.
看起来像这样:
.jar
packages
jar files
fonts
json files
Run Code Online (Sandbox Code Playgroud)
所以,当我尝试加载配置文件时,例如:
BufferedReader reader = new BufferedReader( new FileReader( path ) );
Run Code Online (Sandbox Code Playgroud)
当我在Eclipse中运行应用程序时,一切都只是文件.但jar文件会抛出一个FileNotFoundException.
我在SO上看到的关于这些问题的许多问题建议使用class.getClass().getResource()或使用class.getResourceAsStream().我已尝试使用相对路径和文件名,如下所示:
class.getResource( 'config.json' );
class.getResources( 'cfg/config.json' );
class.getResourceAsStream( '../../config.json' );
Run Code Online (Sandbox Code Playgroud)
当从Eclipse或jar运行时,所有这些方法都返回null:
java -jar myjarfile.jar
Run Code Online (Sandbox Code Playgroud)
我也愿意使用Ant文件.实际上,我现在正在使用导出功能生成的Ant文件来构建jar.如果我可以添加一些内容,将目录添加到jar中,这也很棒.
要访问根目录中的资源,请/在路径前添加前缀.如果没有,则相对于当前包执行此操作,这通常仅在资源实际位于源中的类旁边时才有用.
所以用class.getResourceAsStream("/config.json");来到jar的根目录中的config.json.
另请注意,不直接支持jars-inside-jars.
| 归档时间: |
|
| 查看次数: |
5230 次 |
| 最近记录: |