2017-03-02 51 views
0

最近我开始使用Maven更有效地管理我的项目结构。但是,由于我同时学习JAVA,所以我陷入了一个死胡同,MAVEN中的模块和JAVA包之间的区别是什么?Maven:差异模块 - java包

由于包被用于组的类/接口共享共同的目的: (来源:docs.oracle)

定义包是相关类型的提供访问保护和名字空间管理的分组。

,我无法找到一个模块的明确定义,比模糊的更好表示: (来源:http://docs.jboss.org/tools/latest/en/maven_reference/html/creating_a_maven_application.html

一个Maven模块是一个子项目

从我阅读的内容来看,我们应该创建模块,以分离项目,业务,领域中的逻辑,基本上任何被视为独立实体的东西。

因此,为什么我们不能使用包来做同样的事情?目的不一样吗?

我也在这里取消所有的构建配置。如果它是唯一的区别,那么请提供论证什么时候应该使用哪一个。

+1

你可能不希望混合你的Java应用程序和Web应用程序的构建,即使它们通过一些中间API相关。这最好将项目分成2个子项目。并且maven为你做的很好 – Adonis

+0

然后他们在概念上做同样的事情,maven的唯一区别或者更确切的目的在于物理构建配置属性? –

回答

1

Maven是一个捆绑工具,它将软件的可重用部分组合到应用程序中,无论它是Java代码,图像资源还是HTML模板。它构建您的应用程序,以便它可以在特定环境(本地,测试,生产等)中运行或部署。所有这些与Java程序包无关。

如果您(或其他人)想要重新使用您编写的代码,那么您应该关心Maven模块。例如,您编写了一个转换货币的Web应用程序,现在您想在另一个应用程序中使用转换逻辑(但不是Web前端)。在这种情况下,您需要为Web前端创建一个模块,并为业务逻辑创建一个模块。

+0

模块是一个类的集合。包是类的集合。如果我可以在特定的软件包中打包业务逻辑所需的所有类,那么将它们打包到模块中有什么区别?我发现重用它们的利润没有任何差别。你能详细说明一下吗? –

+0

以拥有身份管理服务器和API的大型公司为例进行访问。此外,在不同的团队中开发了几个应用程序,例如,编辑人员使用的内容管理系统,销售人员使用的客户关系管理等等。所有这些应用程序都需要与身份管理服务器通信,以通过API对用户进行身份验证。该API将是所有应用程序可能依赖的典型Maven模块。 – Matt

+0

在第一个使用Web应用程序和划分前端/后端模块的场景中,我想最终创建一个具有业务逻辑的jar可以立即用于任何其他可以使用它的项目中?因此它不需要关心重新编译代码?也许我的疑惑来自于这样一个事实,即我迄今写过的所有简单程序都可以简单地复制1/2类的代码。我的想法是否正确? –

0

包是一个类的集合。模块是具有构建配置的包的集合。

如果是你自己的项目,你可以组织它们,但是你想要使用包和/或模块。如果你想为多个项目创建一个可重用的组件(例如库),你应该使用一个模块。

如果您只有软件包,项目将不得不为所需的每个库直接包含所有软件包(即源文件)。取而代之的是模块(记住它也有构建配置),你可以将编译后的输出(例如.jar,.aar等)包含在你的项目中。