首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不编译module-info,除非使用相同的命令编译包类

不编译module-info,除非使用相同的命令编译包类
EN

Stack Overflow用户
提问于 2020-06-13 21:45:06
回答 1查看 485关注 0票数 2

我有一个名为myModule的文件夹。在它里面,还有一个名为myPackage的文件夹,我的Main.class就在这个文件夹中。

myPackage旁边,我有我想要编译的module-info.java。首先看一下文件夹的层次结构:

代码语言:javascript
复制
--  myModule
    --  myPackage
        --  Main.class
    --  module-info.java

问题是当我想用下面的命令编译我的module-info.java时:

代码语言:javascript
复制
javac module-info.java

我得到以下错误:

代码语言:javascript
复制
package is empty or does not exist: myPackage

但是,当我将Main.java放入myPackage中,然后使用相同的命令编译这两个文件时:

代码语言:javascript
复制
javac module-info.java myPackage/Main.java

错误消失。我不明白为什么会发生这种事?

EN

回答 1

Stack Overflow用户

发布于 2020-10-07 05:54:13

TL;DR -A模块信息.java文件不是设计为独立的文件。它被设计成多源文件编译单元的一部分。一个单元,它包括模块描述符、加上至少一个其它文件。

长篇大论的版本

“…还有另一个名为myPackage的文件夹,其中包含我的Main.class…“

我假设您是想输入Main.java,而Main.class是…之后的疏忽

  1. 你没有提到它是一个已经编译的字节码文件。
  2. 我想不出为什么有人会故意把一个.class文件放在源目录中。

我还将假定--尽管您在问题中根本没有提到这一点--您是有意遵循…中推荐的约定

“…按照约定,模块的源代码位于一个目录中,该目录是模块…的名称“

因此,我还假设您的模块-info.java,就像我的实验模块一样,包含…

代码语言:javascript
复制
module myModule { 
    exports myPackage;
}

请记住,javac tool …

描述

javac命令读取源文件,其中包含用Java语言…编写的模块、包和类型声明

还要考虑JPMS…的。

可靠配置,用程序组件声明彼此

显式依赖的方式取代脆弱的、容易出错的类路径机制

如果我每周六签合同帮你修剪草坪,却再也没有出现,那我有多可靠?想象一下,如果javac为声称要导出包的模块编译module-info.java文件是合法的,但该包中没有类。这样的模块有多可靠?

如果我的构建从Maven Central下载了您假设的myModule工件,那么我的类中可能有一个import myPackage.*,结果却什么都没有。

“问题是当我想用下面的命令编译我的module-info.java时:”

javac模块-info.java

这个谜团的线索是,当myPackage目录包含合法源代码时,上面的命令会导致相同的错误。

错误消息没有告诉您文件系统目录为空。它告诉您,您声称模块导出的是空的。编译器不知道任何你永远不会作为编译单元的一部分传递给它的源代码。

“…错误消失。“

通过执行:javac module-info.java myPackage/Main.java,您将组成一个编译单元,该单元由模块声明其导出的内容组成。哪个值为指定系统应使用…

代码语言:javascript
复制
$ javac -d mods/com.greetings \
        src/com.greetings/module-info.java \
        src/com.greetings/com/greetings/Main.java

因此,尽管有拼写错误,但您报告的错误原因非常简单:编译一个不包含任何源文件的模块不仅毫无意义,就编译器而言,它是一个格式错误的模块。因此,这是非法的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62360613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档