2010-01-15 45 views
7

我们在Eclipse项目大约显示下列文件夹:的Eclipse:出口.jar和包括资源文件(ANT)

application 
    - src 
    - JRE System Library [1.6] 
    - Referenced Libraries 
    - lib 
    - rsc 

在我们的项目,我们想用文件>导出...>可执行JAR

那么工作正常,但有一些例外:如果我们想运行我们的application.jar,我们仍然需要将文件夹rsc /复制到与application.jar相同的位置。

在rsc /中,我们有其他文件夹用于分隔不同部分。 基本上,我们使用加载代码的作品(当然有点改变,但路径的风格是正确的)

strUrl = "file:rsc/properties/Constants.properties"; 
url = new URL(strUrl); 
ImageIcon icon = new ImageIcon(url); 

我可以右击在RSC />构建路径>用作源文件夹。

但是这不起作用,因为eclipse不会自动将rsc文件夹复制到bin/-folder。然后我们不能再运行它从终端(不打包到罐子里)

EDIT:为什么eclipse无法正确处理这个问题?为什么它有“嵌套”输出文件夹的问题?在Build Path对话框的Source选项卡中,我可以轻松地将rsc/-folder与输出文件夹设置为bin/rsc /,但似乎无法将嵌套文件夹...


编辑2:现在我已经能够创建一个xml文件来构建与ant的东西,并以某种方式设法将rsc文件夹包括到jar中。由于相同的错误仍然不会运行。我真的需要检查资源路径,不管它们是否在JAR中? JAR的内容,现在是这样的:

META-INF/ 
META-INF/MANIFEST.MF 
configurator/ 
controller/ 
editor/ 
gui/ 
logic/ 
networking/ 
rsc/ 
rsc/gamesettings/ 
rsc/levels/ 
rsc/pics/ 
rsc/properties/ 
util/ 

但仍然Java的讨厌我并抛出java.io.FileNotFoundException: rsc/properties/Constants.properties有大约100线堆栈跟踪。


任何人的想法如何做到这一点? thx &关于

回答

15

如果您标记rsc作为源文件夹Eclipse会将其内容复制到输出目录。或者,如果您想要将输出中的资源分组,请将rsc移至src之下。

然后,您可以使用Class.getResource("/properties/Constants.properties")Class.getResource("/rsc/properties/Constants.properties"),无论您的应用程序是打包为jar还是从源代码运行,它都可以工作。

作为旁注,file:协议只适用于普通文件,要访问jar里面的文件,你必须使用类似new URL("jar:file:app.jar!/rsc/properties/Constants.properties")的东西。

+0

是的。这是解决方案,但在Eclipse中将rsc/as标记为src-folder不起作用。另一名学生带领我采用同样的解决方案。问题是我们不得不使用Class.getResource(“...”),该路径预先加了一个'/'。 thx和问候 – Atmocreations 2010-01-22 14:43:20

+0

对不起,你是什么意思'Class#getResource()'? 'Class'类中没有这种静态方法。 – m0skit0 2013-10-14 15:08:47

+0

@ m0skit0该方法不是静态的,对于混淆抱歉。 – 2013-10-22 16:06:34

2

对于这种用法,我会建议使用Maven,它会在创建jar时自动执行此操作。甚至还有an Eclipse plugin。您也可以使用Ant

+0

thx,我知道这种工具存在。但我没有与他们有任何经验,我的观点是,如果日食提供了一个工具来创建可执行jar,我想应该可以简单地添加另一个文件夹到jar而不修改它。 – Atmocreations 2010-01-16 14:21:10

4

您可以尝试:在Java Build Path对话框中,转到Libraries选项卡并选择“Add Class Folder ...”。从“类文件夹选择”对话框中选择rscrsc目录的内容现在将包含在可执行jar文件中。

(请注意,RSC本身不会被收录,所以你可能需要添加一个新的子目录下,RSC尽在罐子正确的目录结构。)

+0

thx为您的回应。那么是的,那会起作用。但问题是我无法将这些对象移动到rsc/rsc /中,因为本地运行(没有创建jar文件)将不再起作用... – Atmocreations 2010-01-16 14:17:55

1

我这样做通常是手工,你的情况 jar -uf foo.jar rsc 包含所有资源。 您可以编写脚本或者当你在编辑2,你都在一个罐子说这样做是蚂蚁

1

,这应该工作:

String path = "rsc/img/img.gif"; 
URL url = this.getClass().getResource(path); 
ImageIcon icon = new ImageIcon(url); 
+0

感谢您的回应。我不得不说“this.getClass()”位于src/util/ 将尝试它 – Atmocreations 2010-01-20 10:35:38