在这篇文章中,我将讨论创建一个 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 中有完全相同的包,那么原型将被损坏并且无法工作。解决方案是将测试放在包下一级的文件夹中。我会报告的。