当前位置: 首页 > 面试题库 >

Eclipse Java项目文件夹组织

南门鸿振
2023-03-14
问题内容

我是从C#/ Visual Studio的背景来学习Java和Eclipse的。在后者中,我通常会组织这样的解决方案:

\ MyProjects \ MyApp \ MyAppsUtilities \ LowerLevelStuff

MyApp将包含一个用于构建.exe的项目,MyAppsUtilities将创建一个由.exe调用的程序集DLL,而LowerLevelStuff可能会构建一个包含更高级别的实用程序DLL使用的类的程序集。

在Eclipse(Ganymede,但可以说服改用Galileo)中,我有:

\ MyProjects \ workspace \ MyApp

当我创建我的初始项目时。有一个选项可以将源文件和构建文件放在同一文件夹中,但是我在反映我的包层次结构的路径上创建了.java文件:

\ MyProjects \ workspace \ MyApp \ src \ com \ mycompany \ myapp \
MyApp.java

我的问题是这样的:当我为.jar文件创建子项目(是否正确的Java /
Eclipse术语?)时,它类似于.NET中的上述MyAppsUtilities和LowerLevelStuff程序集DLL,可以(应该)等效地组织这些文件夹吗?例如:

\ MyProjects \ workspace \ MyApp \ src \ com \ mycompany \ myapp \
myapputilities \ MyAppsUtilities.java

组织这些内容的标准/正确方法是什么?如何在IDE中特定地完成它?


问题答案:

将Java源代码包视为一种大的分层命名空间。商业应用程序通常位于“ com.mycompany.myapp ”(此应用程序的网站可能为“
http://myapp.mycompany.com ”)下,尽管显然并非总是如此。

在myapp包下组织内容的方式在很大程度上取决于您。您在可执行文件(.exe),DLL和低级类之间对C#所做的区分在Java中不存在相同形式。所有Java源代码都被编译成.class文件(其内容称为“字节码”),可以在许多平台上由Java虚拟机(JVM)执行。因此,高级/低级类没有内在的区别,除非您通过包装将其归类。常见的包装方式是:

  • com.mycompany.myapp :主类;MyApp(使用主要方法)
  • com.mycompany.myapp.model :域模型类;客户,订单等
  • com.mycompany.myapp.ui :用户界面(演示或视图)代码
  • com.mycompany.myapp.service :应用程序内的服务,即“业务逻辑”
  • com.mycompany.myapp.util :在多个地方使用的帮助程序类

这表明是一个独立的Java应用程序,如果它是使用许多框架之一的Web应用程序,则可能会有所不同。

这些软件包与项目中的目录层次结构相对应。使用Eclipse时,这种层次结构的根称为“源目录”。一个项目可以定义多个源目录,通常是“主”目录和“测试”源目录。

项目中文件的示例:

src/test/java/com/acme/foo/BarTest.java
src/main/java/com/acme/foo/Bar.java
lib/utilities_1_0.jar

在实用程序_1_0.jar中:

com/acme/foo/BarUtils.class

BarUtils.class这是一个编译的Java类,因此可以以平台无关的字节码形式在任何JVM上运行。尽管有时您可以下载也包含源(.java)文件的jar版本,但jarfile通常仅包含编译的类。如果您希望能够读取正在使用的jar文件的原始源代码,这将很有用。

在Bar上面的示例中,BarTest和BarUtils都位于com.acme.foo包中,但实际上位于硬盘上的不同位置。

直接位于源目录中的类位于“默认包”中,通常不建议将类保存在该目录中,因为不清楚该类属于哪个公司和应用程序,如果有任何jar文件,则可能会发生名称冲突您添加到类路径中的默认包中包含一个具有相同名称的类。

现在,如果您部署此应用程序,则通常会将其编译为.class文件并捆绑在.jar中(基本上是.zip文件的奇特名称加上一些清单信息)。制作.jar对运行应用程序不是必需的,但是在部署/分发应用程序时很方便。使用清单信息,您可以将一个.jar文件设为“可执行”,以便用户可以轻松地运行它,请参见[a]。

通常,您还将使用几个库,即您从Internet获得的现有.jar文件。非常常见的示例是用于访问数据库的log4j(日志记录框架)或JDBC库等。另外,您可能拥有自己的子模块,这些子模块部署在单独的jar文件中(如上面的“
utilities_1_0.jar”)。如何通过jarfile拆分事物是一个部署/分发问题,它们仍然共享Java源代码的通用命名空间。因此,实际上,如果需要,您可以解压缩所有jarfile并将内容放在一个大目录结构中(但通常不这样做)。

在运行使用/包含多个库的Java应用程序时,会遇到通常称为“类路径地狱”的情况。我们知道Java的最大缺点之一。(请注意:帮助正在路上)。要在命令行上运行Java应用程序(即不是从Eclipse),您必须在类路径上指定每个.jar文件位置。当您使用Java的许多框架之一(Maven,Spring,OSGi,Gradle)时,通常会有某种形式的支持来减轻这种痛苦。如果要构建Web应用程序,则通常只需遵守其分层/部署约定即可将其轻松部署到您选择的Web容器(Tomcat,Jetty,Glassfish)中。

我希望这能对Java的工作原理有一些一般的了解!

[a]要制作MyApp应用程序的可执行jar,您在路径上需要一个JDK。然后在编译(bin或目标)目录中使用以下命令行:

jar cvfe myapp.jar com.mycompany.myapp.MyApp com\mycompany\myapp

然后,您可以使用以下命令从命令行执行它:

java -jar myapp.jar

或通过双击jar文件。请注意,在那种情况下您不会看到Java控制台,因此这仅对具有自己的GUI(例如Swing应用程序)或可能在后台运行(例如套接字服务器)的应用程序有用。



 类似资料:
  • 我在eclipse中有一个JavaNLP项目(比如X),它在maven中有依赖项 现在,我已经使用JavaSwing为这个项目(x)构建了UI,JavaSwing是eclipse中的另一个项目(比如Y)。 当我运行项目Y(点击按钮时调用项目X)时,会给我带来错误,比如 java.lang.NoClassDefFoundError: edu/stanford/nlp/ie/NER分类文件 我认为这是

  • 问题内容: 我想使用“文件类”从项目文件夹中获取文件,我该怎么办? 问题答案: 嗯,有很多不同的方法来获取Java文件,但这是一般要点。 不要忘记,您至少需要将其包装在a 中,因为File是其中的一部分,这意味着它必须具有try-catch块。 不是要解决Ericson的问题,而是如果您使用的是实际的软件包,则除非明确使用文件的位置,否则文件的位置将有问题。相对路径与Packages混为一谈。 即

  • 本文向大家介绍sharepoint 创建项目或文件夹,包括了sharepoint 创建项目或文件夹的使用技巧和注意事项,需要的朋友参考一下 示例 创建列表项 上面的示例演示了通过执行以下操作创建列表项: 调用addItem列表对象的方法以获取项目对象 调用set_item结果列表项对象上的方法以根据需要设置每个字段值 调用update列表项对象上的方法以指示要提交的更改 调用executeQuer

  • 问题内容: 我注意到Node.js项目通常包含以下文件夹: / libs,/ vendor,/ support,/ spec,/ tests 这些到底是什么意思?它们之间有什么区别,我应该在哪里包含引用的代码? 问题答案: 关于您提到的文件夹: 通常用于自定义 或 包含第三方库(使用git作为源代码管理时添加为git子模块) 包含BDD测试规范。 包含应用程序的单元测试(使用测试框架,请参见 此处

  • 我们看一下全局的文件结构: ▸ build/ // 编译用到的脚本 ▸ config/ // 各种配置 ▸ dist/ // 打包后的文件夹 ▸ node_modules/ // node第三方包 ▸ src/ // 源代码 ▸ static/

  • 我想通过使用“文件类”从项目文件夹中获取文件,我如何做到这一点?