【问题标题】:Compiling multiple java files within a single file?在一个文件中编译多个java文件?
【发布时间】:2021-06-14 21:00:29
【问题描述】:

试图编译一个多文件包。需要通过:javac mainfile.java 编译,同时通过一个文件同时编译所有其他(大约 4 个其他 .java 文件)?我曾尝试使用诸如 extend 和 import package.* 之类的语句,任何帮助将不胜感激。

我使用了不同的编译方法和参数,但尝试仅通过插入 javac mainfile.javajava mainfile 来做到这一点

总结:试图一次编译多个java文件,通过java编译单个文件。

我当前的主文件代码:

package mypackage;
import mypackage.*;

public class mainfile{
   public static void main(String[] args) {
       Myfile.main(args) //run main from other file
}
}

编辑:抱歉信息不足,编译时,编译器返回:

MainFile.java:15: error: cannot find symbol
         Myfile.main(args);
         ^
symbol: variable Myfile
location: class mainfile
1 error

【问题讨论】:

  • 您描述了您的目标和尝试,但没有描述出了什么问题(任何错误消息)。请补充。另外:当文件位于package mypackage 本身时,您不需要import mypackage.*。最后:你的班级被命名为mypackage.mainfail。您需要将其用作java 的参数:它始终需要完整的类名。
  • 你的文件 MainFile.java 应该包含一个类public class MainFile
  • @tobias 你能解释一下你的答案吗?为什么一次编译多个文件有效,为什么 OP 试图做的不是。谢谢。

标签: java compilation main helper


【解决方案1】:

javac 作为一个工具不能做你想做的事。但是,这就是存在其他工具的原因。

您的要求归结为“我想要一个构建系统”。绝大多数java项目使用mavengradle

看起来这很好用:

javac -sourcepath src src/mainfile.java

但你会被骗。这只会编译mainfile.java 中的代码直接引用的所有源文件,但还有许多其他方法可以引用代码,例如 SPI、反射、XML 配置文件。绝大多数 java 项目最终都会使用一些结构,这些结构迟早会“破坏”-sourcepath“技巧”,这大概就是为什么所有 java 项目都使用构建系统而不是依赖于-sourcepath

请注意,所有源文件的行为都好像它们具有:

import java.lang.*;
import yourownpackage.*;

在顶部,无论您是否将其写出来。而且,import 是“别名”的 java-ese。 import foo.bar.Baz; 表示:每当 'Baz' 作为类型出现在此文件中时,假设我的意思是写 'foo.bar.Baz',仅此而已import foo.bar.Baz 不运行任何代码无论如何,那是在 Baz 类中。如果你不使用 Baz,那么生成的类文件根本没有提到 Baz。这也不会导致 javac 编译整个目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 2012-02-02
    相关资源
    最近更新 更多