2

在使用 jGRASP 时,我注意到包中程序的输出与正常情况略有不同,特别是程序名称似乎是从类顶部开始的相对路径。

例如,对于包含语句的 Java 程序,package ch01.stacks;编译输出如下所示:

 javac -g ch01\stacks\ArrayStack.java

并且运行输出类似地出现。

我想知道是否有一种相对简单的方法可以在其他程序(例如 Notepad++ 或 gedit)中模拟这种行为,用户可以在其中设置脚本来编译程序。

编辑:对不起,我忘了提到我正在谈论的编译脚本本质上是传递给javac的程序文件名。我宁愿不使用绝对路径,如果可能的话,我希望我的脚本以类似于 jGRASP 的方式工作。

为了进一步澄清手头的问题,我相信包结构给我带来了问题,因为它是在程序的当前目录中编译的。我正在寻找一种相对于包结构编译我的 Java 程序的方法。

也就是说,有什么方法可以检测编译所需的顶级目录(前面示例中的ch01),而无需通过程序查找package

4

1 回答 1

0

我仍然不确定你想要什么,这不适合评论。

jGRASP 的行为完全是正常行为。Java 类文件,包括源类和编译类,都存在于反映其包名称的文件层次结构中。任何 Java IDE 或命令行构建工具(AntMavenGradle等)都理解这一点,并做出相应的行为。

如果您真的希望重新发明这些轮子,您的代码也需要这样做。如果您的 Java 源代码严重不存在于规范的包/文件层次结构中,那么是的,您需要为每个文件的package声明询问源代码,并将编译后的.class文件放入适当的目录中。

javac-d选项设置输出目录。编译的类将根据其包名称放置在正确的位置。但是,在编译时,所有导入都必须在类路径中可用,无论是您自己的类,还是第三方库(通常在 jar 中)的类。

简而言之:不要做你要问的事情。我想不出这样做的充分理由。(这并不意味着没有任何充分的理由,但我……非常怀疑。)甚至可以使用相对固定的make文件来构建 Java 项目。一个比你提出的更好的解决方案,但仍然是一个可怕的想法。

注意:当您运行Java 应用程序时,类文件必须存在于预期的层次结构中,无论是打包在 jar(或 war)文件中,还是在文件系统中。

于 2011-10-28T03:40:32.290 回答