我已经开始将NetBeans 9.0与Java 10一起使用(孵化)。我创建了一个新的测试Java应用程序项目,并在创建它时勾选了“使用专用文件夹存储库”('\ lib')。我还将JDK / Java版本设置为10
。然后,我将Apache Commons Codec 1.11作为依赖库。除了从主类的Base64
包中导入binary
类以外,我什么也没做。
但是,当我构建应用程序时,NetBeans不会在lib
目录中创建dist
目录,也不会创建包含org.apache.commons.codec.*
包的胖Jar。 )。
这似乎是Java 10特有的,因为当我将JDK / Java版本更改为8时,它表现出预期的效果(已复制的库)。
编辑:我已经看到了其他问题(关于其他版本的Netbeans和Java)的各种答案,这些问题提出了各种target
和condition
片段来放置在构建中脚本来覆盖build-impl.xml
,而我尝试不起作用。
这有两个问题吗?
lib
目录,还是我无法正确配置项目?注意:测试项目的目的是诊断我是否可以重现一个影响较大项目的问题,该问题需要更新才能使用较新版本的Java。旧项目使用了我所工作的公司内部开发的许多库。我们没有足够的资源来设置和迁移到基于Maven的构建系统,并且仍在使用Ant。
答案 0 :(得分:3)
我可以重现您的问题。
不幸的是,这是一个NetBeans 9.0错误。参见NETBEANS-1097 "Copy Dependent Libraries" does not work if "Source/Binary Format" is JDK 9 or JDK 10。
该错误描述了一种可能的解决方法,Halvor的答案中也提到了这种方法。但是,尽管这似乎对您不起作用(基于您的评论),但对我来说部分起作用:
我尝试的另一件事是 {项目}>右键单击>“属性”>“库” ,然后编辑“库文件夹” 字段,将其从相对路径更改为绝对路径路径。这似乎并没有使事情变得更好或更糟。
答案 1 :(得分:2)
此问题的一种解决方法似乎是修改您的build-impl.xml
。
找到以下条件:
<condition property="do.mkdist">
<and>
<isset property="do.archive"/>
<isset property="libs.CopyLibs.classpath"/>
<not>
<istrue value="${mkdist.disabled}"/>
</not>
<not>
<istrue value="${modules.supported.internal}"/>
</not>
</and>
</condition>
并删除与modules.supported.internal
有关的细分,剩下您:
<condition property="do.mkdist">
<and>
<isset property="do.archive"/>
<isset property="libs.CopyLibs.classpath"/>
<not>
<istrue value="${mkdist.disabled}"/>
</not>
</and>
</condition>
不幸的是,NetBeans有时会覆盖此更改,但仍应作为一种解决方法。