从 #KFCStandard JavaFX 项目创建 Maven 原型

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 255 小节,累计 39w+ 字,讲解图:1716 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1300+ 小伙伴加入,欢迎点击围观

在这篇文章中,我将讨论创建一个 maven 原型,我的学生或任何其他人都可以使用它来开始开发 javafx 应用程序。就像编程中的许多冒险一样,这个过程开始得很快,然后在处理具体细节时陷入困境。如果您想创建自己的原型,那么本文将会有所帮助。不要忘记阅读最后的抱怨部分。

示例 javafx 项目的源代码位于 https://github.com/omnijava/simplejavafx

准备在您的系统上安装的原型文件夹位于 https://github.com/omnijava/archetypejavafx/releases 的版本中

第一步:编写程序

可以使用自下而上或自上而下的方法创建原型。到目前为止,最简单的方法是自上而下。您首先编写一个非常简单的 maven 管理的 javafx 应用程序。您正在提供包含必需或推荐的包、资源和源代码的应用程序框架。

我创建的应用程序是一个简单的 javafx 阶段,其中一个场景带有一个按钮,按下该按钮会显示一些文本。提供这种体验的代码采用我希望我的学生遵循的格式。几年前,一些学生创建了一个哈希标签来取笑我严格的规则 #kfcstandard。我如何描述我提供给学生必须遵守的任何规则或说明。该项目在 pom 文件、如何启动 javafx 应用程序、如何进行单元测试以及如何注释代码等方面举例说明了许多#kfcstandards。如果您不是我的学生之一,那么您可能对我的原型有疑问。我真的很想听听你的想法。生活在学术界,我担心我失去了软件开发的真实世界。

尽力确保程序有效。如果您正在创建一个文件为空等待用户填写的原型,那么这可能不会成为问题。如果您的代码像我的一样做了一些事情,请花一些时间来让它正确。

原型提示 #1 :始终创建以 maven groupid 和可选的 artifactid 开头的包。这允许您的原型用户使用他们自己的包名称。

原型提示 #2 :如果您将 pom.xml 中的主类引用为:


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

改成


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

原型提示 #3 :如果您需要在使用原型时创建一个包,但您没有任何东西可以放入包中,那么请添加一个空文件。如果其中没有文件,maven 将不会创建包。

pom.xml 注意: 当我用 netbeans 编译时,我收到两个关于 pom.xml 的警告。一个告诉我 ${groupid} 已弃用,取而代之的是 ${project.groupid},第二个告诉我 ${artifactid} 已弃用,取而代之的是 ${project.artifactid}。 netbeans 8.01 编辑器只识别 ${project.groupid} 而不是另一个。因此现在我使用的是已弃用的版本。

第二步:安装maven

我使用 netbeans,我个人对 ide 的偏好以及我在开发原型代码时使用的东西。在我教授的一门课程中,我必须使用 Eclipse。这些 ide 和其他 ide 现在都为 maven 提供了良好的支持。当我说在命令行创建原型更容易时,认识我的人现在会翻白眼。从 https://maven.apache.org/download.cgi 下载并安装 maven。阅读 https://maven.apache.org/install.html 上的安装说明。你需要在可执行路径中有 maven 的 bin 文件夹,Windows 用户必须有一个 java_home 环境变量。

maven note : 一些IDE,比如netbeans,包含maven命令行程序。我建议下载 maven,以便您使用最新版本。

第 3 步:清理项目

找到您的项目所在的文件夹。删除项目文件夹中除 src 文件夹和 pom.xml 文件之外的所有内容。您可能想要制作项目文件夹的副本,因为您将更改一个文件,如果您在更改后运行项目,该文件将导致抛出异常。

第 4 步:更改 fxml 文件

如果您在资源文件夹中创建一个带有 fxml 文件的项目,它可能包含对其 java 控制器文件的引用。在此项目中,文件 scene.fxml 包含:

fx:controller=”com.kenfogel.archetypejavafx.controllers.fxmlcontroller”>

您需要用匹配的属性替换与 groupid artifactid 匹配的包部分。变化看起来像:

fx:controller=”${groupid}.${artifactid}.controllers.fxmlcontroller”>

第 5 步:原型解析或生成原型

原型解析是 Maven 开发人员用来描述使用 Maven 生成原型的术语。此任务将创建一个新的目标文件夹,其中包含代码的原型版本。

在项目的根文件夹中打开命令窗口。在我的例子中是 d:\mvnbuild\archetypejavafx。在提示符下发出命令:


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

您可以忽略所有警告。

如果一切顺利,您将拥有以下通常不属于 Maven 构建的文件夹:

d:\netbeansprojects\javafxarchetype\target\generated-sources\archetype

第 6 步:使 fxml 文件可过滤

archetype 文件夹中的项目现在包含两个名为 archetype-metadata.xml 的文件。此 xml 文件确定哪些文件将进入原型以及它们是否被过滤。过滤就是用一个值替换一个属性。这就是我们在上一步中更改 scene.fxml 文件的原因。 archetype-metadata.xml 文件不显示资源的 fxml 文件夹中的文件是可过滤的。找到这两个文件,我的在:

d:\netbeansprojects\javafxarchetype\target\generated-sources\archetype\src\main\resources\meta-inf\maven

d:\netbeansprojects\javafxarchetype\target\generated-sources\archetype\target\classes\meta-inf\maven

编辑文件,它们是相同的,以更改:


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

读书


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

第 7 步:在您的存储库中安装原型

在原型文件夹中打开一个命令窗口,并在提示符下输入以下命令:

d:\netbeansprojects\javafxarchetype\target\generated-sources\archetype> mvn 安装

忽略任何警告。原型应该安全地在

.m2\repository\com\kfcstandard\javafxarchetype-原型

您的 .m2 文件夹在哪里。

步骤 8a:测试它是否适用于 maven 命令行

在您的计算机上创建一个新文件夹以进行测试。我创建了 d:\mvntest。在此文件夹中打开一个命令窗口。运行命令:


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

接下来的内容非常简单。这是我的输出。请注意,您需要输入 groupid、artifactid、version 和 package。包应该由 groupid 和 artifactid 组成。


 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

 <mainclass>com.kfcstandard.javafxarchetype.mainappfx</mainclass>

mvnbuild 文件夹中创建的项目中,检查 scene.fxml 文件并确保它具有基于您输入的 groupid artifactid 的控制器路径。检查项目中的 pom.xml 并验证 主类 是否具有正确的包。

步骤 8b:使用 netbeans 进行测试

启动 netbeans 并选择:

文件 -> 新项目

在对话框中选择左侧的 maven 和右侧 的 project from archetype ,然后单击 next

向下滚动找到 javafxarchetype-archetype ,选择它并单击 next

在下一个屏幕上,您可以填写成为 工件 ID 项目名称 组 ID 版本 。更改默认为 group id plus artifact id 的 是不寻常的。

单击 完成 ,您将加载一个项目。您应该能够 清理和构建 然后 运行 该项目。

您现在已准备好将代码添加到项目中。

步骤 8c:使用 Eclipse 进行测试

启动 eclipse 然后选择 file -> new -> other 。在此对话框中打开 maven 并选择 maven 项目

在下一个对话框中无需更改任何内容,因此只需单击 下一步

在下一个对话框中,您应该会看到所有可用于 eclipse 的原型。在我的系统上,本地原型首先出现,因此我们创建的原型应该首先出现。选择它并单击 下一步

现在你可以填写 group id artifact id version package 。与 netbeans 一样, group id artifact id 组成。点击 完成

该项目将出现在 包资源管理器 中。右键单击项目并选择 run as -> maven build 并在对话框中选择 run 。该程序应该打开。关闭它,您现在就可以将代码添加到项目中了。

一口呜呜声

在学习如何创建 Maven 原型时​​,我遇到了一个关于我在网上找到的内容的严重问题。几乎每个博客、帖子或 stackoverflow 的回答都只不过是对 apache maven 文档的解释。在我看来,这些作者从未在现实世界中使用过 maven 或原型。 apache maven 文档也是如此。它缺乏任何现实世界的例子,而且远非用通俗易懂的语言编写。

maven 原型系统中也存在一个错误。我花了两天时间才找到它。如果您在 src/main/java 文件夹中有一个由 groupid 和 artifactid 组成的包,并且在 src/test/java 中有完全相同的包,那么原型将被损坏并且无法工作。解决方案是将测试放在包下一级的文件夹中。我会报告的。