如何向classpath添加资源

如何将文件夹(例如包含arts的资源文件夹)添加到netbeans项目的类路径中? 我设法通过编辑项目的NB生成的jar文件(即它的MANIFEST.MF文件+手动复制资源)手动完成,但应该有一种方法告诉netbeans也要记住资源,不是吗?

文件夹结构如下所示:

/project/art/ /project/dist/lib/ /project/dist/art/ /project/dist/project.jar /project/lib/ /project/src/ 

我不想将艺术品装入jar子里,因为我希望这种艺术很容易交换。 如果我将art文件夹添加到src文件夹,那么NB编译正常,但艺术资源最终在jar中。

将art文件夹添加到netbeans项目库(属性 – >库 – >添加JAR /文件夹)似乎不起作用,因为我最终得到一个错误’… \ project \ art是一个目录或不能读。 不要复制库。’ 这反过来又阻止了真正的库文件夹被复制。

有任何想法吗?

最好的问候克里斯

2基于来自gpeche的注释进行观察:a)在“运行”选项卡中指定附加资源文件夹而不是在项目属性的“编译”选项卡中指定 – >库似乎没有太大区别Netbeans(我目前正在使用6.9.1)。 输出(以及错误)保持不变,即根本不会复制任何内容:

 Created dir: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\art is a directory or can't be read. Not copying the libraries. Not copying the libraries. Building jar: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist\VocabularyTrainer.jar 

另一个有趣的方面是,在“库”面板的“帮助”菜单中,没有明确提及有关文件夹的库。 是否有可能,Netbeans中的按钮被错误命名,只允许真正的jar?

b)将资源文件夹添加到Libraries列表确实会产生影响,即向MANIFEST.MF添加另一个条目。 虽然 – 这是一个较小的问题 – 类路径条目似乎总是期望资源文件夹是库文件夹的子文件夹(例如“lib / arts”),主要问题是似乎缺少斜线。 如上所述,MANIFEST.MF中NB生成的条目看起来像这个“lib / arts”(对我来说不起作用),而(手动设置)“lib / arts /”呢?

我使用文件夹中的资源的方式是这样的:

 URL resource = getClass().getResource("/gui/refresh.png"); ImageIcon tmp = new ImageIcon(resource); 

编辑:

基于Tushars评论和这篇文章,我发现以下解决方案是function性和舒适性之间可接受的权衡。

我从自动生成的’build-impl.xml’文件中覆盖ANT目标,该文件在Netbeans项目的基本’build.xml’文件中的MANIFEST.MF文件中创建Class-Path。 转到’build.xml’文件的代码如下所示:

       <!--  if you want to exclude something... -->                               

权衡是,对于Netbeans的开发,我仍然需要将资源文件夹(例如’art’)添加到库列表中,以使项目在Netbeans中运行。 这将导致MANIFEST.MF文件(’lib / art’)中的附加条目以及库不会自动复制到’dist’文件夹的效果,并带有消息

 ...\art is a directory or can't be read. Not copying the libraries. Not copying the libraries. 

这种行为是 – afaik – 意图(迫使所有东西被捆绑在一个jar子里),即使有关于它的讨论。 要制作一个真实的分发包,我必须从NB中的库列表中取出资源文件夹并重建。

关于更简化的设置而没有任何权衡的想法当然仍然受欢迎。 🙂

  1. 将资源文件夹添加到类路径:

    清理 – 并 – 构建基于NetBeans Ant的项目时,它会在项目的根目录中创建manifest.mf文件。 该文件也包含在JAR文件中。 修改此文件并添加如下条目:

     Manifest-Version: 1.0 X-COMMENT: Main-Class will be added automatically by build Class-Path: arts/ 

    在课堂上的艺术之后,斜线很重要。

  2. 包括分发中的arts资源文件夹

    在构建之后在dist文件夹中复制此文件夹,或者添加ANT目标以复制dist文件夹中的所需资源。

    在build.xml文件中添加如下目标:

           
  3. 访问此类资源的代码:

    访问此类资源文件所需的代码如下:(这在设计时不起作用,但肯定来自JAR文件)

     // pay attention to relative path URL resource = ClassLoader.getSystemResource("gui/refresh.png"); ImageIcon tmp = new ImageIcon(resource); 

    注意:位于项目根目录中的文件manifest.mf和build.xml可从NetBeans IDE中的“文件”面板访问

使用NetBeans 8.0.2:

  1. 右键单击该项目。
  2. 选择属性
  3. 选择来源
  4. 单击“ 源包文件夹”的“ 添加文件 夹”
  5. 选择资源所在的目录。
  6. 单击目录名称上的“ 打开 ”。
  7. 单击“ 确定”关闭“ 项目属性”对话框。

资源将添加到项目中。

您还会在导航窗格中看到添加的目录

在另一个项目中,资源现已可用。 例如,要读取图像:

 BufferedImage zero = ImageIO.read(OCR.class.getResourceAsStream("/0.bmp")); 

为了从Class-Path中删除lib / art而不是“是目录还是无法读取”,需要从路径中删除lib / art:

     ** **