Netbeans 9.0 孵化 - 不在 `dist` 中为 migrated/updated Java 10 项目创建 `lib` 目录

Netbeans 9.0 Incubating - Does not make `lib` directory in `dist` for migrated/updated Java 10 project

我已经开始将 NetBeans 9.0(孵化)与 Java 10 一起使用。我创建了一个新的测试 Java 应用程序项目,并在创建它时勾选了 'Use Dedicated Folder for Storing Libraries' ('\lib') .我还将 JDK/Java 版本设置为 10。然后我将 Apache Commons Codec 1.11 作为依赖库包括在内。除了从主 class.

中的 binary 包中导入 Base64 class 之外,我没有做任何其他事情

但是,当我构建应用程序时,NetBeans 不会在 dist 目录中创建 lib 目录,也不会创建包含 org.apache.commons.codec.* 包的 fat Jar (s) 来自图书馆。

这似乎特定于 Java 10,因为当我将 JDK/Java 版本更改为 8.

时,它的行为符合预期(复制库)

编辑: 我看到了其他问题的各种答案(关于其他版本的 Netbeans 和 Java)提出了各种 targetcondition 片段放置在构建脚本中以覆盖 build-impl.xml,我试过没有效果。

这还有两个问题吗?

  1. Netbeans 9.0 是否不完全支持 Java10,导致 copyLibs 任务静默失败?
  2. Java10 是否不支持创建相对于应用程序 jar 的 lib 目录,还是我没有正确配置项目?

注意:测试项目的目的是诊断我是否可以重现影响需要更新以使用较新版本的较大项目的问题Java.旧项目使用了我工作的公司内部开发的许多库。我们没有必要的资源来设置和迁移到基于 Maven 的构建系统,并且仍在使用 Ant。

此问题的一个解决方法似乎是修改您的 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 有时会覆盖此更改,但它仍应作为解决方法发挥作用。

我可以重现你的问题。

不幸的是,这是一个 NetBeans 9.0 错误。参见 NETBEANS-1097 "Copy Dependent Libraries" does not work if "Source/Binary Format" is JDK 9 or JDK 10

该错误描述了一种可能的解决方法,Halvor 的回答中也提到了该方法。然而,尽管这似乎对你不起作用(根据你的评论),但它对我有部分作用:

  • 编辑 nbproject/build-impl.xml,如错误中所述。
  • 清理并构建项目。
  • 完成后 commons-codec-1.11.jar 被放置在目录 dist/lib.
  • 可是,我还是没有拿到肥罐

我尝试的另一件事是 {project } > 右键单击​​ > Properties > Libraries,然后编辑 Libraries Folder 字段,更改它从相对路径到绝对路径。这似乎并没有使事情变得更好或更糟。