当前位置: 首页 > 知识库问答 >
问题:

无法使用IntelliJ IDEA 2017.2中的--patch module编译Java 9模块。1.

吕飞翼
2023-03-14

我试图熟悉Java9模块以及如何在IntelliJ中定义它们。除此之外,我想使用--patch module编译器/JVM标志来解决一个拆分包的问题,但我不知道如何使它在IntelliJ中工作。

我正在使用IntelliJ IDEA 2017.2。1构建#IC 172.3544。35与Java热点(TM)64位服务器虚拟机(构建9 180,混合模式)。

这是我的源文件MyImmutableList。java

package com.google.common.collect;

public class MyImmutableList extends RegularImmutableList {
  public MyImmutableList(Object[] array) {
    super(array);     
  }
}

它属于我的模块com.effjava.collectwithmodule-info.java

module com.effjava.collect {
    // do not require module guava; instead patch this module with guava.19-0.jar via:
    // javac --patch-module com.effjava.collect=guava-19.0.jar module-info.java com/google/common/collect/MyImmutableList.java
    //    requires guava;        
    exports com.google.common.collect;
}

对于模块的编译,我使用设置=

编译失败,因为编译器无法从guava库中找到超类regulammutablelist

IntelliJ提供的建议是为guava库向模块描述符添加requires指令,这当然不起作用,因为编译器随后正确地抱怨了拆分包问题:

错误:java:moduleguava读取包com.google.常见的从两个com收集。effjava。采番石榴

在进一步的调查中,我注意到构建过程发出了一个与--patch module标志相关的警告,上面说:

错误:异常构建进程终止:"C:\Program Files\Java\jdk-9\bin\java"-Xmx700m-Djava.awt.headless=true

...很多东西...

警告:未知模块:com.effjava.collect指定到--patk-模块

... 更多的东西。。。

顺便说一句,我不知道如何获得编译器警告。我没有将它们隐藏在IntelliJ的消息窗口中,但我无法看到它们。作为一种解决方法,我只是指定了伪编译器标志,让构建过程崩溃,以便它在崩溃报告中发出警告。

无论如何,在构建模块时,构建过程会抱怨相关模块不存在,因此无法通过--patch module进行修补。这一抱怨毫无意义,因为我确实通过在命令行级别手动输入javacjar命令成功编译和构建了我的模块:

cd %PROJECTDIR%\com.effjava.collect\src
javac --patch-module com.effjava.collect=../../guava/guava-19.0.jar -d ../../out/production/com.effjava.collect module-info.java com/google/common/collect/MyImmutableList.java
jar --create --file=../../out/artifacts/com_effjava_collect_jar/com.effjava.collect.jar -C ../../out/production/com.effjava.collect .

我如何告诉IntelliJ的构建过程我想修补我的模块?

共有1个答案

温峻熙
2023-03-14

最终,通过以下IntelliJ配置(IDEA-169150的固定版本)-

IntelliJ IDEA 2018.1 (Community Edition)
Build #IC-181.4203.550, built on March 27, 2018
JRE: 1.8.0_152-release-1136-b20 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.3

项目的Java编译器设置如下所示:-

>

  • 覆盖每个模块的编译器参数
  • 选择模块
  • 将编译选项添加到补丁(注意-我使用了jar的最新版本)

    --patch-module com.effjava.collect=/Users/naman.nigam/.m2/repository/com/google/guava/guava/24.1-jre/guava-24.1-jre.jar
    

    发布此选择构建

  •  类似资料:
    • 问题内容: 我有一个使用Xcode 10.3构建的VoiceSampler.framework 我正在尝试在新项目的Xcode11中使用该框架。我已经成功添加了该框架,但是当我用AppDelegate 编写时,出现以下错误: 使用Swift 5.0.1编译的模块无法由Swift 5.1编译器导入:/Users/apple/Projects/CaptureAppSwift/VoiceSampler.

    • 问题内容: 我正在尝试按照指令https://github.com/Paytm- Payments/Paytm_iOS_App_Kit/tree/master/Swift/BitCodeDisabled/PaytmNativeSDK将 第三方应用程序集成到项目中 我在构建中看到以下错误 Swift 5.0编译器无法导入使用Swift 4.2.1编译的模块 我尝试了工具链https://medium

    • 问题内容: 我有一个简单的IronPython脚本: 它运行良好,并打印 你好 ,如果我的IronPython的运行: 按照 IronPython中 给出的说明 -如何编译exe ,我使用以下命令将该IronPython脚本编译为EXE: 执行Foo.exe会出现此错误: 为什么找不到模块“ os”?我该如何解决这个问题,以便获得可以运行的EXE? 问题答案: 构建一个可以分发的Ironpytho

    • 问题内容: 但是我已经使用相同的Xcode重新编译了框架,但它仍然给我这个错误。 两者的基本SDK iOS 11.1 两种的Swift语言版本Swift 4.0 不使用豆荚/迦太基 我希望有人会知道 问题答案: 更新: 对于Xcode的发行版本: 当使用Xcode 9.1、9.2、9.3、9.4、10等打开使用早期Xcode工具构建的框架的项目时,将发生此错误(以及与Swift 4.1、4.2等类

    • 非常简单的用例,我使用的是EclipseOxygen4.7。3a,包括来自Java9的支持。我有两个项目是Java 9项目: 我想在中使用类,因此我尝试将第二个模块导入第一个项目。 模块信息。java项目1: 模块信息。java项目2: Eclipse给了我错误: 项目二不能解析为模块 我是否必须将所有Java项目集中在一个“主项目”下,以便让Eclipse知道所有这些模块在其中都是可用的?还是我

    • 在试图使用JDK9.0.1编译Maven项目时,我遇到了这个stacktrace,但没有给出太多解释: 带有maven-compiler-plugin 3.7.0的Maven 3.5.0 我正在执行mvn clean Install 不幸的是,源代码不是开源的,所以我不能随意分享 还没有module-info.Java文件,我只是尝试使用Java9编译一个项目 奇怪的是,如果我将源级别保留在1.8