0

我很少使用 java,所以我对现代生态系统的了解非常有限 :(。AFAIK,Java 与目录层次结构和文件名紧密相关:例如,如果我有一个带有“com.mycompany.myapp.jar”的 .jar 文件。 WndMain”类,对应的 .class 文件必须准确命名为“WndMain.class”(区分大小写!)并放在 .jar 文件(实际上是 .zip 存档)内的“com/mycompany/myapp”目录树中。

但是在开发应用程序时,我不希望我的源代码文件被命名为 CamelCase 并分散在一些目录树中!毕竟,这是我的源代码。我更喜欢以我可以舒适地使用它们的方式来组织文件,而不是一些愚蠢的编译器和存档器:)。我想要一个干净的“src”文件夹,其中包含“wnd_main.java”、“wnd_about.java”等文件。在编译过程中根据实际源代码内容自动生成正确的文件名和目录结构是否是一种简单的方法?

当然,我可以创建自己的脚本——通过 Python、Ruby、Shell 或其他方式——读取“.java”文件的内容、解析“using”和“class”指令、创建目录结构、复制文件、编译等。 ..但也许所有这些都在几年前就已经完成了,我所需要的只是“sudo apt-get install javamake”之类的东西?:)

4

5 回答 5

0

不,编译器不会让您声明文件中声明的包名称(如package com.mycopmany.myapp)与磁盘上的实际目录结构不匹配的类。

src为了避免在您的层次结构中包含目录,这似乎需要做很多工作。

于 2012-09-07T16:52:33.340 回答
0

这将是一项艰巨的任务,因为每个源文件中的包名称必须与@mattb 所说的目录结构相同,但是您可以使用一些构建工具,例如Ant(最常用的工具)来创建您正在寻找的解决方案为了。

例如,如果您以这种方式组织您的源:

src
    foo
        class_1.java
        class_2.java
    bar
        class_3.java
        class_4.java

您可以使用 Ant 将所有源文件复制到一个临时目录,然后编译并打包到一个 .jar 中,但正如我所说,您会遇到一些问题,例如名称冲突(例如:您可以在不同的目录中拥有相同名称的类目录)。您的所有类必须具有不同的名称,并且所有类必须相互访问,因为它们在同一个包中。所有这些问题都与我提出的解决方案有关。当然,您可以修改复制到 temp 目录的文件的代码,但我真的不认为这一切都值得一试……我真诚地建议您遵循“开发方式”中的Java,使用一些 IDE,遵循Java 代码约定等。

于 2012-09-07T16:55:01.083 回答
0

这是没有意义的。在这里很难找到问题。
但我会试着回答:

  1. Java 要求您的文件严格按照其类名进行组织。
    想想 Python,它强制缩进。它这样做是为了消除与缩进相关的编码约定的需要
  2. 它这样做是为了您自己好,以防止以下类型的情况:

    我如何在这么大的项目中找到这门课?
    事实证明,我正在编写一个已经存在的类/功能。
    对于这个项目,我应该如何组织文件?有什么约定吗?
    什么?!在一个文件中定义了 100 个类?

  3. 不喜欢手动处理文件和目录结构?
    使用 IDE,它会为你做到这一点。

  4. 如果您仍然想要 Java 的灵活性,为什么不尝试一些基于 Java 的语言呢?
    例如,像 Groovy。或者 Clojure,或者 Scala,或者......
    它们都在 JVM 中工作,它们的语法与 Java 的兼容,但更加宽松宽松。这同样适用于目录结构。奖金!您可以将 Groovy 脚本与 Java 类混合使用。

底注:实际上,非公共类不需要遵循这个约定
如果出于某种奇怪的原因,您决定声明一个具有包访问权限的类,
不会从您的包外部访问它,但您可以给它起您想要的名称。

于 2012-09-07T16:58:17.243 回答
0

您不必严格.java文件组织到与包匹配的目录结构中 -.class文件必须采用这种结构,但javac会接受.java文件的平面结构 - 但是如果您这样做,您的生活会变得更加轻松世界上所有更高级别的 Java 工具都希望您遵循这个约定。例如,Ant 依靠.java.class目录结构之间的匹配来判断哪些.class文件相对于它们对应的.java. 如果结构不匹配,它将每次重新编译每个.java文件。

但是,每个.java文件的名称必须与其定义的名称匹配public class(您可以在一个文件中有多个类,.java但最多可以有一个,public并且其名称必须与文件名匹配)。这是编译器的要求,不值得反对。

于 2012-09-07T17:08:21.550 回答
0

scons构建系统根据.java文件内容完美创建目录结构。安装就像pypm -g install scons.

于 2012-09-07T22:08:06.903 回答