我找到了Scene Builder GitHub页面,并注意到他们的项目由另外两个模块组成:应用程序和工具包。有没有可能构建一个类似的架构,也许更容易一点?我想我应该在这种情况下整理模块的工作。我将非常感谢回答和链接到这个问题的材料。
The GitHub page
项目的简化结构如下所示:
app/
├─ src/
kit/
├─ src/
src/
pom.xml/
字符串
我尝试通过Intellij IDEA创建一个项目并添加两个模块,但我不知道如何为它们配置依赖项,或者在配置中使用app模块的main方法指定一个类,因为IDE不允许这样做。
1条答案
按热度按时间cmssoen21#
本指南适用于使用Maven的多模块项目,您可以使用其他构建工具(如Gradle或IDE)实现类似的功能,但这不在本文的范围内。本指南并不全面(详细信息最好通过现有教程和文档进行处理,Web上已经有很多)。
正如Slaw在评论中指出的那样,不建议通过手动设置在IDE中定义复杂的项目结构,并且首选使用构建工具(Maven或Gradle)。
在JavaFX项目中使用多个自定义Java模块
为JavaFX自定义组件创建和使用java模块的信息:
该链接中的一些信息(与SceneBuilder导入和使用相关的内容)可能不适用于您的情况,但很多内容应该是相似的。
上面链接的指南将不同的组件保持为单独的项目,而不是父项目的子模块。添加父项目需要更多的工作,需要您遵循本答案其余部分中概述的一些步骤。
Java模块和Maven模块不同
Java modules和Maven模块是完全不同的东西。你必须明白,Maven模块处理项目的构建时模块化,Java模块处理运行时模块化。
你可以选择其中一个,两个都用,或者都不用。你可以建立一个项目,用Java模块1:1创建Maven模块,但并不要求这样做。
Java模块讨论
与Maven依赖项不同,*java模块强制并降低可见性 *。这需要您做额外的工作来定义模块的可见接口。如果不使用Java模块,则不需要这些工作。
Java模块可以在降低应用程序的复杂性和安全性方面提供好处,允许基于工具的依赖性分析(例如通过jdeps工具和graphviz),并使用jlink或jpackage为应用程序构建自定义运行时。
Java模块的一个主要问题是,你可能依赖的许多重要软件都没有完全模块化(没有提供模块信息定义)。这大大降低了Java模块化可以提供的好处,也增加了创建和交付模块化项目的复杂性,同时也使用了非模块化软件。
如果java模块定义(module-info.java)没有从模块中打开或导出包,则模块 * 中的代码不能在模块 * 之外使用。
虽然这是一个简单的概念(也是模块化的主要目的之一)。对于许多不习惯使用模块系统的Java开发人员来说,这是一个陌生的概念,因为Java传统上并不是这样工作的-如果代码在类路径上的某个地方可用,那么它可以通过直接API调用和反射来使用,但是一旦代码已经使用Java模块模块化,情况就完全不是这样了。
Maven模块讨论
Maven的最佳实践是为一个项目创建一个主工件(例如jar文件)。有时这有点限制,您可能希望输出多个工件(例如从构建中输出多个jar文件)。在这种情况下,推荐的方法是创建多个Maven模块,并有一个引用每个子模块的父项目。
每个模块可以像它自己的项目一样运行,并输出一个主构建工件(单个jar文件)。上游构建模块可以依赖于其他模块构建的工件,并在必要时使用它们。
需要遵循的Maven模块指南
要求的阅读:
最佳实践是提供CI-friendly versions for multi-module projects,不过是否遵循这一点取决于您。
关于模块化的建议
您应该考虑的一个问题是为什么要模块化项目。(例如IDE构建器)可以使用场景构建器工具包模块来提供嵌入其IDE中的场景构建器的功能,而不是作为独立的应用程序(由依赖于工具包实现的SceneBuilder应用程序模块提供)。您引入模块化的原因可能会有所不同,但你应该能够合理地向可能会问的人清楚地表达出来。
我建议不要在一个项目中引入太多的模块,因为这会使项目更难处理。例如,如果你的look at the core JavaFX system(很大),它总共由七个模块组成,每个模块都有一个明确的存在理由。
我的建议是:
1.在有意义的情况下,将maven模块用于大型复杂项目(例如,具有前端UI模块和后端服务器模块的多层应用程序)。
1.对于那些只依赖于模块化依赖关系的项目(包括module-info的项目),使用Java模块,如果不是这样的话,可能会跳过创建Java模块。