为什么NetBeans找不到某些项目的CopyLibs?

21

今早我遇到了一个非常棘手的问题,导致我花了数小时来追踪它。我继承了一些代码,其中包括两个NetBeans项目,AB。它们都可以成功构建和运行;没有复杂的Ant构建任务,只是默认的IDE设置。

这两个项目共享大量的代码,因此我将其提取出来成为一个新的第三个项目——Common。解决了引用等问题后,NetBeans 没有报告任何错误。一切似乎都很正常。我顺利地构建了 Common 项目。然后事情变得奇怪了。

突然间,在我尝试构建项目 AB 时,它们能够正常编译,但是在构建结束时,它们都出现了同样的错误:

Copying 1 file to C:\Projects\projectName\build
C:\Projects\projectName\nbproject\build-impl.xml:723: The following error occurred while executing this line:
C:\Projects\projectName\nbproject\build-impl.xml:543: taskdef class org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs cannot be found
 using the classloader AntClassLoader[]
BUILD FAILED (total time: 3 seconds)

所有的 .class 文件出现在 build/classes,其他一切看起来都很顺利,但是什么也没有到达 dist 文件夹。于是我开始寻找 CopyLibs 的问题。

有人建议确保 project.properties 文件中正确引用了 org-netbeans-modules-java-j2seproject-copylibstask.jar(确实已经引用了),以及 <userhome>/.netbeans/version/build.properties 文件(也已经引用)。实际上,这个库在被引用的所有位置都存在;事实上,NetBeans 默认会将这个 jar 的一个副本放入所有 Java 项目的 ./lib 文件夹中。我尝试创建全新的项目并手动导入源代码,但无济于事。我感到困惑不解。

我在这里发布帖子,希望:

  • 也许有人可以给我一些关于为什么会发生这种情况以及如何避免它的见解。
  • 也许有人可以告诉我为什么只有某些项目会出问题,即使所有项目都具有完全相同的project.properties文件或是全新创建的。
  • 未来遇到这个问题的人会更容易解决它。
5个回答

28

我在网上找到的最接近解决方法是这个链接,但它只包含部分解决方案。按照那篇文章中的指示不能解决问题,因为它遗漏了一些重要内容。以下是我最终找到的解决方案。

在NetBeans中,进入这里:

Tools > Options > Miscellaneous > Ant

在窗口底部,有一个标记为属性的框。将以下内容粘贴到框中:

libs.CopyLibs.classpath=C\:\\Program Files\\NetBeans 7.1\\java\\ant\\extra\\org-netbeans-modules-java-j2seproject-copylibstask.jar

NetBeans 7.1替换为您实际的安装路径。这实际上就是全部内容!使它变得棘手的是,当您单击OK时,NetBeans似乎会对该字段中的文本进行一些解析。具体来说,它将反斜杠视为转义字符,并且有时还会添加反斜杠

这就是我花了这么长时间才找到答案的原因:我尝试了链接中的解决方案(例如C:\Program Files\Netbeans等),但它不起作用,但后来我回到这个窗口发现了这个:C\:Program Files等。我想:“哦!”,“我只是打错了!我真蠢!”于是我“纠正”了它,改成了C:\,然后再次尝试——仍然没有成功。结果发现NetBeans会添加一个反斜杠以转义:,但只会删除在此处找到的任何其他单反斜杠。

我仍然不知道为什么最初会出现这种情况,或者为什么它似乎只影响某些项目。


刚遇到了同样的问题,有人知道为什么会发生吗? - 1392023093user
1
在NetBeans 8.0.2中,它是通过Tools > Java > Ant进行访问,类似于James答案中的7.3屏幕截图。 - jla
1
要在NetBeans之外进行修复,请将此行添加到C:\ Users \ username \ AppData \ Roaming \ NetBeans \ x.y.z \ build.properties - Jus12
谢谢。你救了我的一天 :) - Nisuga Jayawardana

9
我之前在Mac上安装了NetBeans 7.1.2,卸载后安装了7.3.1,但还是遇到了相同的错误。这里是我解决问题的方法:进入 NetBeans 菜单 > 首选项 > Java 标签 > Ant 子标签 > 属性。我发现属性仍然使用旧版本的号码,所以我需要将 7.1.2 更改为 7.3.1,然后它就能工作了。感谢您让我找到正确的解决方案!

是的,这就是解决方法。每次我重新安装Netbeans时,都会遇到这个问题,然后偶然发现了这个答案来解决它 :D - CodedMonkey
这应该是正确的答案。省了我好几个小时。如果使用另一个版本的Netbeans,请替换为您的版本。 - Jus12

1

背景信息:Ant属性保存在用户目录中的build.properties文件中。这取决于平台,但可以通过查看nbproject/private/private.properties文件找到。然后查看user.properties.file下的路径,并查看指向的文件 - 您可以查看Ant构建中使用的路径以及它们是否正确。


0
在我的项目中,当我安装了一个更新的NetBeans时,一个私有属性必须更改。项目文件nbproject/private/private.properties以以下行结尾:
user.properties.file=C:\\Users\\Fred\\AppData\\Roaming\\NetBeans\\12.5\\build.properties

"12.5" 是旧版的 NetBeans。将其更正为 "16" 解决了问题。

0

我的设置问题最终在我包含的一个项目库中。它仍然有CopyLibs-2文件夹而不是升级的CopyLibs文件夹,但nblibraries.properties有升级后libs.CopyLibs的东西。我不知道如何触发升级,所以我做了以下操作:

  1. 删除lib/CopyLibs-2
  2. 右键单击“库”文件夹,选择“添加库”。
  3. 导入CopyLibs任务
  4. 添加CopyLibs任务库

这样就可以在我的“库”文件夹中显示CopyLibs,这似乎有点奇怪,因为它通常像jnlp一样隐藏,但没有设置全局libs.CopyLibs.classpath在工具 > Java > Ant属性下也可以正常工作。

清除和添加需要尝试几次才行。有时它会添加但出现问题,解决消息将是'“CopyLibs”库缺少项目'和'问题:“该项目使用名为“CopyLibs”的类库,但此库的类路径项已丢失”。我不明白为什么整个过程这么挑剔和神奇。

我还注意到在提交时,IDE已经更新了我的project.properties文件,将javac.classpath从空变为了${libs.CopyLibs.classpath}。


我认为这是工具的一个错误,CopyLibs classpath值应该在nblibraries.properties中设置,但该文件未被包含,因为工具没有更新库配置。非常理解您对魔法般的IDE不能正常工作的沮丧感。 - mbonness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接