项目设置 project-setup
本教程介绍如何创建Maven Multi Module项目来管理Adobe Experience Manager站点的代码和配置。
先决条件 prerequisites
查看设置本地开发环境所需的工具和说明。 确保您有新的Adobe Experience Manager实例可在本地使用,并且未安装其他示例/演示包(所需的Service Pack除外)。
目标 objective
- 了解如何使用Maven原型生成新的AEM项目。
- 了解AEM项目原型生成的不同模块以及它们如何协同工作。
- 了解AEM项目中如何包含AEM核心组件。
您即将构建的内容 what-build
在本章中,您使用AEM项目原型生成新的Adobe Experience Manager项目。 您的AEM项目包含用于Sites实施的完整代码、内容和配置。 本章中生成的项目将作为WKND站点实施的基础,并在以后的章节中构建该项目。
什么是Maven项目? - Apache Maven是用于构建项目的软件管理工具。 所有Adobe Experience Manager 实施都使用Maven项目在AEM的基础上生成、管理和部署自定义代码。
什么是Maven原型? - Maven原型是用于生成新项目的模板或模式。 AEM项目原型有助于生成具有自定义命名空间的新项目,并包括遵循最佳实践的项目结构,从而大大加快了项目开发。
创建项目 create
提供了几个选项来为AEM创建Maven多模块项目。 本教程使用Maven AEM项目原型 35。 Cloud Manager还提供了一个UI向导以启动AEM应用程序项目的创建。 Cloud Manager UI生成的基础项目具有与直接使用原型相同的结构。
下一系列步骤将使用基于UNIX®的命令行终端来执行,但如果使用Windows终端,这些步骤应该相似。
-
打开命令行终端。 验证是否已安装Maven:
code language-shell $ mvn --version Apache Maven 3.6.2 Maven home: /Library/apache-maven-3.6.2 Java version: 11.0.4, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.4.jdk/Contents/Home
-
导航到要生成AEM项目的目录。 该目录可以是任何要维护项目源代码的目录。 例如,用户主目录下名为
code
的目录:code language-shell $ cd ~/code
-
将以下内容粘贴到命令行以便在批处理模式下生成项目:
code language-shell mvn -B org.apache.maven.plugins:maven-archetype-plugin:3.2.1:generate \ -D archetypeGroupId=com.adobe.aem \ -D archetypeArtifactId=aem-project-archetype \ -D archetypeVersion=39 \ -D appTitle="WKND Sites Project" \ -D appId="wknd" \ -D groupId="com.adobe.aem.guides" \ -D artifactId="aem-guides-wknd" \ -D package="com.adobe.aem.guides.wknd" \ -D version="0.0.1-SNAPSHOT" \ -D aemVersion="cloud"
note note NOTE 要定位AEM 6.5.14+,请将 aemVersion="cloud"
替换为aemVersion="6.5.14"
。此外,始终通过引用AEM项目原型>用法来使用最新的 archetypeVersion
可以在此处🔗找到用于配置项目的可用属性的完整列表。
-
以下文件夹和文件结构由本地文件系统上的Maven原型生成:
code language-plain ~/code/ |--- aem-guides-wknd/ |--- all/ |--- core/ |--- ui.apps/ |--- ui.apps.structure/ |--- ui.config/ |--- ui.content/ |--- ui.frontend/ |--- ui.tests / |--- it.tests/ |--- dispatcher/ |--- pom.xml |--- README.md |--- .gitignore
部署和生成项目 build
生成项目代码并将其部署到AEM的本地实例。
-
请确保在端口 4502 上本地运行了一个AEM的创作实例。
-
从命令行导航到
aem-guides-wknd
项目目录。code language-shell $ cd aem-guides-wknd
-
运行以下命令以生成整个项目并将其部署到AEM:
code language-shell $ mvn clean install -PautoInstallSinglePackage
构建大约需要一分钟,并且应该以以下消息结束:
code language-none ... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for WKND Sites Project 0.0.1-SNAPSHOT: [INFO] [INFO] WKND Sites Project ................................. SUCCESS [ 0.113 s] [INFO] WKND Sites Project - Core .......................... SUCCESS [ 3.136 s] [INFO] WKND Sites Project - UI Frontend ................... SUCCESS [ 4.461 s] [INFO] WKND Sites Project - Repository Structure Package .. SUCCESS [ 0.359 s] [INFO] WKND Sites Project - UI apps ....................... SUCCESS [ 1.732 s] [INFO] WKND Sites Project - UI content .................... SUCCESS [ 0.956 s] [INFO] WKND Sites Project - UI config ..................... SUCCESS [ 0.064 s] [INFO] WKND Sites Project - All ........................... SUCCESS [ 8.229 s] [INFO] WKND Sites Project - Integration Tests ............. SUCCESS [ 3.329 s] [INFO] WKND Sites Project - Dispatcher .................... SUCCESS [ 0.027 s] [INFO] WKND Sites Project - UI Tests ...................... SUCCESS [ 0.032 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 23.189 s [INFO] Finished at: 2023-01-10T11:12:23-05:00 [INFO] ------------------------------------------------------------------------
Maven配置文件
autoInstallSinglePackage
编译项目的各个模块并将单个包部署到AEM实例。 默认情况下,此包将部署到在端口 4502 上本地运行的、凭据为admin:admin
的AEM实例。 -
导航到本地AEM实例上的包管理器: http://localhost:4502/crx/packmgr/index.jsp。 您应该看到
aem-guides-wknd.ui.apps
、aem-guides-wknd.ui.config
、aem-guides-wknd.ui.content
和aem-guides-wknd.all
的包。 -
导航到站点控制台: http://localhost:4502/sites.html/content。 WKND站点是站点之一。 它包括一个站点结构,带有美国和语言母版层次结构。 此网站层次结构基于使用原型生成项目时
language_country
和isSingleCountryWebsite
的值。 -
通过选择页面,然后单击菜单栏中的 编辑 按钮,打开 美国
>
英语 页面: -
已创建入门内容,并且有多个组件可供添加到页面中。 尝试这些组件以了解其功能。 您将在下一章中学习组件的基础知识。
原型生成的示例内容
Inspect项目 project-structure
生成的AEM项目由单独的Maven模块组成,每个模块具有不同的角色。 本教程和大多数开发都侧重于以下模块:
-
core - Java代码,主要是后端开发人员。
-
ui.frontend — 包含CSS、JavaScript、Sass、TypeScript的源代码,主要适用于前端开发人员。
-
ui.apps — 包含组件和对话框定义,将编译的CSS和JavaScript嵌入为客户端库。
-
ui.content — 包含结构化内容和配置,如可编辑模板、元数据架构(https://experienceleague.adobe.com/content%E3%80%81/conf?lang=zh-Hans)。
-
所有 — 这是一个空的Maven模块,它将上述模块组合为一个可以部署到AEM环境的包。
请参阅AEM项目原型文档,了解 所有 Maven模块的更多详细信息。
包含核心组件 core-components
AEM核心组件是AEM的一组标准化Web内容管理(WCM)组件。 这些组件提供了一套基本功能,并针对各个项目进行了样式、自定义和扩展。
AEM as a Cloud Service环境包含最新版本的AEM核心组件。 因此,为AEM as a Cloud Service生成的项目 不 包含AEM核心组件的嵌入。
对于AEM 6.5/6.4生成的项目,原型会自动将AEM核心组件嵌入到项目中。 AEM 6.5/6.4的最佳做法是嵌入AEM核心组件,以确保随项目一起部署最新版本。 有关项目如何包含核心组件的更多信息,请在此处找到。
Source控制管理 source-control
始终最好使用某种形式的源代码管理来管理应用程序中的代码。 本教程使用Git和GitHub。 Maven和/或所选IDE生成的多个文件应被SCM忽略。
当您构建和安装代码包时,Maven会创建一个目标文件夹。 目标文件夹和内容应从SCM中排除。
在下,ui.apps
模块观察到已创建许多.content.xml
文件。 这些XML文件映射JCR中安装的内容的节点类型和属性。 这些文件是关键文件,不能忽略 的。
AEM项目原型生成一个示例.gitignore
文件,可用作可以安全忽略文件的起点。 文件生成于<src>/aem-guides-wknd/.gitignore
。
恭喜! congratulations
恭喜,您已创建第一个AEM项目!
后续步骤 next-steps
通过一个带有组件基础知识教程的简单HelloWorld
示例了解Adobe Experience Manager (AEM) Sites组件的基础技术。
高级Maven命令(附加) advanced-maven-commands
在开发过程中,您可能只使用其中一个模块,并且希望避免构建整个项目以节省时间。 您可能还希望直接部署到AEM Publish实例,或者部署到未在端口4502上运行的AEM实例。
接下来,让我们查看一些其他Maven配置文件和命令,您可以在开发期间使用这些配置文件和命令来提高灵活性。
核心模块 core-module
core 模块包含与项目关联的所有Java™代码。 core 模块的生成将OSGi捆绑包部署到AEM。 仅构建此模块:
-
导航到
core
文件夹(aem-guides-wknd
下):code language-shell $ cd core/
-
运行以下命令:
code language-shell $ mvn clean install -PautoInstallBundle ... [INFO] --- sling-maven-plugin:2.4.0:install (install-bundle) @ aem-guides-wknd.core --- [INFO] Installing Bundle aem-guides-wknd.core(~/code/aem-guides-wknd/core/target/aem-guides-wknd.core-0.0.1-SNAPSHOT.jar) to http://localhost:4502/system/console via WebConsole [INFO] Bundle installed [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.558 s
-
导航到http://localhost:4502/system/console/bundles。 这是OSGi Web控制台,包含有关安装在AEM实例上的所有捆绑包的信息。
-
切换 Id 排序列,您应该会看到已安装并活动的WKND捆绑包。
-
您可以在CRXDE-Lite中看到jar的“物理”位置:
Jar 的CRXDE位置
Ui.apps和Ui.content模块 apps-content-module
ui.apps maven模块包含/apps
下的站点所需的所有渲染代码。 这包括以名为clientlibs的AEM格式存储的CSS/JS。 这还包括用于渲染动态HTML的HTL脚本。 您可以将 ui.apps 模块视为到JCR中的结构的映射,但采用一种可以存储在文件系统上并提交给源代码控制的格式。 ui.apps 模块仅包含代码。
仅构建此模块:
-
从命令行中。 导航到
ui.apps
文件夹(aem-guides-wknd
下):code language-shell $ cd ../ui.apps
-
运行以下命令:
code language-shell $ mvn clean install -PautoInstallPackage ... Package installed in 70ms. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.987 s [INFO] Finished at: 2023-01-10T11:35:28-05:00 [INFO] ------------------------------------------------------------------------
-
导航到http://localhost:4502/crx/packmgr/index.jsp。 您应该看到
ui.apps
包是第一个安装的包,并且其时间戳应比任何其他包都新。已安装
-
返回到命令行并运行以下命令(在
ui.apps
文件夹中):code language-shell $ mvn -PautoInstallPackagePublish clean install ... [INFO] --- content-package-maven-plugin:1.0.2:install (install-package-publish) @ aem-guides-wknd.ui.apps --- [INFO] Installing aem-guides-wknd.ui.apps (/Users/sachinmali/Desktop/code/wknd-tutorial/aem-guides-wknd/ui.apps/target/aem-guides-wknd.ui.apps-0.0.1-SNAPSHOT.zip) to http://localhost:4503/crx/packmgr/service.jsp [INFO] I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) [INFO] Retrying request [INFO] I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) [INFO] Retrying request [INFO] I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) [INFO] Retrying request [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.812 s [INFO] Finished at: 2023-01-10T11:37:28-05:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal com.day.jcr.vault:content-package-maven-plugin:1.0.2:install (install-package-publish) on project aem-guides-wknd.ui.apps: Connection refused (Connection refused) -> [Help 1]
配置文件
autoInstallPackagePublish
用于将包部署到在端口 4503 上运行的Publish环境。 如果找不到在http://localhost:4503上运行的AEM实例,则会出现上述错误。 -
最后,运行以下命令在端口 4504 上部署
ui.apps
包:code language-shell $ mvn -PautoInstallPackage clean install -Daem.port=4504 ... [INFO] --- content-package-maven-plugin:1.0.2:install (install-package) @ aem-guides-wknd.ui.apps --- [INFO] Installing aem-guides-wknd.ui.apps (/Users/dgordon/code/aem-guides-wknd/ui.apps/target/aem-guides-wknd.ui.apps-0.0.1-SNAPSHOT.zip) to http://localhost:4504/crx/packmgr/service.jsp [INFO] I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) [INFO] Retrying request [INFO] I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) [INFO] Retrying request [INFO] I/O exception (java.net.ConnectException) caught when processing request: Connection refused (Connection refused) [INFO] Retrying request [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] --------------------------------------------------------------------
如果端口 4504 上没有可用的AEM实例,则同样会发生生成失败。 在
aem-guides-wknd/pom.xml
处的POM文件中定义了参数aem.port
。
ui.content 模块的结构与 ui.apps 模块相同。 唯一的区别是 ui.content 模块包含称为 可变 的内容。 可变 内容基本上是指存储在源代码管理 中,但可在AEM实例上直接修改 的非代码配置,如模板、策略或文件夹结构。 有关页面和模板的一章中将更详细地介绍此功能。
用于构建 ui.apps 模块的相同Maven命令可用于构建 ui.content 模块。 欢迎在 ui.content 文件夹中重复上述步骤。
疑难解答
如果使用AEM项目原型生成项目时出现问题,请查看已知问题的列表以及未结的问题的列表。
再次恭喜! congratulations-bonus
恭喜您浏览了奖金材料。
后续步骤 next-steps-bonus
通过一个带有组件基础知识教程的简单HelloWorld
示例了解Adobe Experience Manager (AEM) Sites组件的基础技术。