8

There are a couple of questions on SO that sort of hit this, but I am totally new to Java development and I don't know the correct way to approach this.

I have a C# solution, containing two projects (my app, and a unit test project) and within the app, most things are put into folders eg. Interfaces, Exceptions etc.

I am trying to recreate this in Java / Eclipse, but I don't know how. I ended up with lots of packages, which sounds really bad. I also tried adding a source folder but that ended up being outside of the package.

Could anyone point me in the right direction?

Namely, which of those should I use to represent my unit test project/set of unit tests, and subfolders which exist just for organising stuff.

Edit: It also says use of the default package is not advised. What should I be doing?

Edit 2: Here is what it looks like. Does this look vaguely correct? My original C# solution is on the right.

My Layout

4

4 回答 4

5

在典型的 java eclipse 项目中,您将拥有一个或多个源文件夹(例如,一个用于应用程序代码,一个用于单元测试)。

每个文件夹都包含一个包树,通常从您的基本包开始,例如com.mycompany.myapp.

为了避免名称冲突,包名称通常以作为代码作者的实体的域名开头,从顶级域开始并向后(更一般到更具体)。这样,每个类的完全限定名称都是唯一的。比如google创建了一个名为的类List,它会被称为com.google.List,并且不会与现有java.util.List接口冲突。

您可以在此基础包中拥有无限数量的包,例如:

com.mycompany.myapp.persistence
com.mycompany.myapp.domain
com.mycompany.myapp.services
com.mycompany.myapp.web

这完全取决于您的项目以及您想要组织代码和类的方式。

在逻辑级别,包以点作为分隔符命名。它们包含 java 类。

在物理磁盘级别,每个包都是一个目录。java 类包含在 .java 文件中(最常见的是每个文件一个类)。

在 Eclipse 中,“源文件夹”是项目中的一个文件夹,Eclipse 已知该文件夹包含 java 源文件。当您构建项目时,它将被编译并包含在输出中(例如 JAR 文件)。

在 Eclipse 中,您通常在逻辑级别查看它们,显示包。当您告诉 Eclipse“创建一个新包”时,它会为您创建目录。例如,如果您告诉它创建com.mycompany.myproject包,它会自动创建一个com包含文件夹的文件夹,该mycompany文件夹包含一个myproject文件夹。

于 2013-04-12T11:21:05.690 回答
1

在java源码树结构必须匹配包结构

所以 foo.bar 包必须放在

src/foo/bar

也可能不建议使用默认包 - 但您仍然可以使用它 - 最好将东西放入包中

于 2013-04-12T11:15:30.730 回答
0

在java中,不同的项目开发结构是根据项目类型流动的。因此,由于您是 java 和 Eclipse 的新手,因此最好安装 maven 插件并创建 maven 项目并根据您的项目类型选择原型,例如独立的或基于 Web 的。maven 插件将创建项目结构,包括包、测试包源文件夹等。您可以从中获得有关项目结构的更多信息

于 2013-04-12T11:19:35.623 回答
0

使用默认包可能会产生命名空间冲突。想象一下,您正在创建一个包含 MyClass 类的库。有人在他的项目中使用您的库,并且在他的默认包中也有一个 MyClass 类。编译器应该做什么?Java 中的包实际上是一个完全标识您的项目的名称空间。所以重要的是不要在现实世界的项目中使用默认包。

于 2013-04-12T11:20:34.350 回答