我很少使用java,所以我对现代生态系统的了解非常有限:(。AFAIK,Java很重视目录层次结构和文件名:例如,如果我有一个.jar文件 “com.mycompany.myapp.WndMain”类,相应的.class文件必须完全命名为“WndMain.class”(区分大小写!)并放入.jar文件中的“com / mycompany / myapp”目录树中(即实际上是一个.zip档案。)
但是在开发应用程序时,我不希望我的源代码文件被命名为CamelCase并分散在某些目录树中!毕竟,这是我的源代码。我更喜欢按照 me 与它们一起工作的方式组织文件,而不是对于某些愚蠢的编译器和存档器:)。我想要一个干净的“src”文件夹,其中包含“wnd_main.java”,“wnd_about.java”等文件。是否有一些 easy 方式在编译期间自动生成正确的文件名和目录结构,基于实际的源代码内容?
当然我可以创建自己的脚本 - 通过Python,Ruby,Shell或其他 - 读取“.java”文件的内容,解析“using”和“class”指令,创建目录结构,复制文件,编译等...但也许所有这些已经在几年前完成,我需要的是像“sudo apt-get install javamake”? :)
答案 0 :(得分:0)
不,编译器不允许您声明文件中声明的包名称(如package com.mycopmany.myapp
)与磁盘上的实际目录结构不匹配的类。
这似乎需要做很多工作才能避免在src
层次结构中使用目录。
答案 1 :(得分:0)
这将是一项艰巨的任务,因为每个源文件中的包名必须等于@mattb所说的目录结构,但你可以使用一些构建工具,如Ant(最常用的)创建您正在寻找的解决方案。
例如,如果您的源以这种方式组织:
src
foo
class_1.java
class_2.java
bar
class_3.java
class_4.java
您可以使用Ant将所有源文件复制到临时目录,然后在.jar中编译和打包,但正如我所说,您将遇到一些问题,例如名称colisions(例如:您可以使用相同的类)不同直接的名字)。您的所有类必须具有不同的名称,并且所有类必须相互访问,因为它们位于同一个包中。所有这些问题都与我提出的解决方案有关。当然,您可以修改复制到临时目录的文件的代码,但我真的不认为这一切都值得尝试...我自己建议您遵循“开发方式” Java,使用某些IDE,遵循Java Code Conventions等
答案 2 :(得分:0)
这毫无意义。这里很难找到问题 但我会尽力回答:
它为你自己的好做,以防止类型的情况:
如何在这么大的项目中找到这门课? 事实证明我正在写一个已经存在的类/功能 对于这个项目,我应该如何组织文件?有一些约定吗?
什么?!在一个文件中定义了100个类?
不喜欢手动处理文件和目录结构吗? 使用IDE ,它会为您完成。
底音:实际上,非公开课不需要遵循此惯例。
如果由于一些奇怪的原因,您决定使用包访问来声明您的某个班级,
不会从您的软件包外部访问,但您可以为其指定所需的名称。
答案 3 :(得分:0)
您没有严格 将.java
文件整理到与软件包匹配的目录结构中 - .class
文件必须采用这种结构,但{ {1}}将接受javac
文件的扁平结构 - 但是,如果您这样做,您将使您的生活更轻松,因为世界上几乎所有更高级别的Java工具都希望您遵循此约定。例如,Ant依赖于.java
和.java
目录结构之间的匹配,以便能够分辨哪些.class
文件与其对应的.class
相比已过时。如果结构不匹配,则每次都会重新编译每个.java
文件。
但是,每个.java
文件的名称必须与其定义的.java
的名称相匹配(您可以在一个public class
文件中包含多个类,但是其中大多数可以是.java
,其名称必须与文件名匹配)。这是编译器的要求,并且不值得与之抗争。
答案 4 :(得分:0)
scons
构建系统根据.java
文件的内容完美地创建目录结构。安装就像pypm -g install scons
一样简单。