从 AEM 下载时如何在 Eclipse 中使用捆绑包

How to work with a bundle in eclipse when it was downloaded from AEM

我从包管理器的 运行 AEM 实例下载了一个 zip - http://localhost:4502/crx/packmgr/index.jsp。解压缩后的 zip 文件包含 jcr_rootMETA-INF

我想在此 zip 文件之上构建一些功能。所以我想知道是否有办法在 Eclipse 中处理这个文件?但是,此 zip 文件夹中没有 pom.xml 个文件。所以我不能只在 Eclipse 中导入它。我为 Eclipse 下载了 AEM 开发人员工具。

是否有说明如何执行此操作的可用指南? zip 文件包含一些 Java 文件,我想对这些 Java 文件进行更改并重新打包、重新部署,以便我可以测试我的更改。

我尝试使用 Adob​​e Brackets(带有 AEM 扩展名),但它仅适用于 JS 或 JSP 更改...不适用于 JAVA 文件。

更新

经过@Gabriel 的评论,这是我对我需要如何四处走动的理解 我下载的包通过eclipse创建的新项目

完成上述操作后

这是我 copy/pasted 完成所有内容后新 eclipse 项目的样子

来自下载包filter.xml的内容

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/etc/designs/delta"/>
    <filter root="/apps/delta"/>
    <filter root="/content/delta"/>
    <filter root="/content/dam/delta"/>
    <filter root="/content/usergenerated/content/delta"/>
    <filter root="/apps/foundation/components/parsys"/>
</workspaceFilter>

基于以上我在以下位置更改了两个filter.xml

/myproj.ui.apps/src/main/content/META-INF/vault/filter.xml

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/myproject">
        <exclude pattern="/apps/myproject/install" />
    </filter>
    <filter root="/apps/foundation/components/parsys" />
    <filter root="/etc/designs/delta"/>
</workspaceFilter>

/myproj.ui.content/src/main/content/META-INF/vault/filter.xml

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/content/myproject"/>
    <filter root="/content/dam/myproject"/>
    <filter root="/content/usergenerated/content/delta"/>
</workspaceFilter>

执行 clean/publish 似乎没有任何效果,因为我在执行 clean/publish 后没有在 CRX 或 localhost:4502/siteadmin 中看到任何内容。所以我尝试手动安装。

为此,我在 myproj 上做了 Run as -> Maven Install(它构建了以下 zip 文件)

~/Documents/workspace/myproj $ tree | grep "zip"
│       ├── myproj.ui.apps-0.0.1-SNAPSHOT.zip
        ├── myproj.ui.content-0.0.1-SNAPSHOT.zip

当我将这两个文件上传并安装到 CRX 时,我看到以下内容:

然而,这似乎也没有任何效果,因为我在 localhost:4502/siteadmin 中没有看到任何东西,当我访问 localhost:4502/content/myproj 时,我得到一个错误

``

顺便说一句,这是我在 localhost:4502/siteadmin

下看到的

更新 2

再次完成所有操作后,我能够创建 eclipse 项目并成功 clean/publishing。但是,当我 clean/publish 时,对 JAVA 文件的更改不会反映出来。

@Gabriel 提到

PROJECT.core for Java bundles (these will become interesting as soon as you want to add Java code)

我已经有 java 个文件位于 PROJECT.ui.apps 中,如下图所示

如果我更改此 JAVA 文件和 clean/publish,我的更改不会反映在 AEM 中。为了能够更改和发布 JAVA 代码,是否还需要做其他事情?或如何更改 JAVA 文件并在 AEM 上进行测试?

我想您需要为下载的包创建新的 pom 文件。 Here you can see how to create bundle. Also after creating file, you will be able to use 在任何更改后部署包。

您可以使用“新建项目”功能为您创建正确的结构:

  • 在 Eclipse 中执行 File > New > Project...
  • 选择 AEM > AEM 示例多模块项目 > 下一步
  • 选择最新的 Archetype 版本
  • 输入名称群组IDArtefact Id > 下一个
  • 添加到现有服务器(如果已有服务器)并选择位置,否则选择设置新服务器 并填写所有字段 > 完成
  • 等待 Eclipse 完成所有设置

您现在已经为您创建了以下项目,这将允许关注点的健康分离:

  • PROJECT.ui.apps /apps/etc 内容
  • PROJECT.ui.content 对于 /content 作者
  • PROJECT.core for Java bundle(一旦你想添加 Java 代码,这些就会变得有趣)
  • PROJECT.it.launcherPROJECT.it.tests 用于集成测试(您可以忽略这些,只要您不 运行 任何集成测试)

首先,将 PROJECT.ui.apps 项目的内容替换为包的 appsetc 文件夹:

  • Project Explorer 面板中,展开 PROJECT.ui.apps > src > main > content > jcr_root > apps
  • 右键单击 apps 文件夹并选择 显示在 > System Exporer
  • 删除您现在应该看到的 appsetc 文件夹,并将您的内容包的 appsetc 文件夹放在这里
  • 在 Eclipse 中,右键单击 PROJECT.ui.apps 项目并选择 刷新

然后对 PROJECT.ui.content 执行相同操作,并将其 content 文件夹替换为您的包之一:

  • Project Explorer 面板中,展开 PROJECT.ui.content > src > main > content > jcr_root > content
  • 右键单击较深的 content 文件夹并选择 显示在 > System Exporer
  • 删除您现在应该看到的 content 文件夹,并将内容包的 content 文件夹放在这里
  • 在 Eclipse 中,右键单击 PROJECT.ui.content 项目并选择 刷新

现在您必须更新这两个项目的 filter.xml 文件以对应您的内容包的内容。 为此,请在单独的 text/code 编辑器中打开内容包的 META-INF/vault/filter.xml 文件。

这是您的 filter.xml 文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/foo"/>
    <filter root="/apps/foundation/components/bar"/>
    <filter root="/etc/designs/foo"/>
    <filter root="/content/foo"/>
    <filter root="/content/dam/foo"/>
    <filter root="/content/usergenerated/content/foo"/>
</workspaceFilter>

至于你的包被分成两个项目的内容,你还必须将这些过滤规则分成两部分,并相应地更新两个项目的 filter.xml 文件。

  • 在 Eclipse 中,打开 PROJECT.ui.apps/src/main/content/META-INF/filter.xml
  • <workspaceFilter> 元素的内容替换为以 /apps/etc
  • 开头的包规则
  • 然后打开PROJECT.ui.content/src/main/content/META-INF/filter.xml
  • 将规则替换为您的包中以 /content
  • 开头的规则

根据上面的例子,PROJECT.ui.appsfilter.xml 看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/foo"/>
    <filter root="/apps/foundation/components/bar"/>
    <filter root="/etc/designs/foo"/>
</workspaceFilter>

PROJECT.ui.content之一:

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/content/foo"/>
    <filter root="/content/dam/foo"/>
    <filter root="/content/usergenerated/content/foo"/>
</workspaceFilter>

确保保存所有更改。您现在应该完成了,并且可以将新内容同步到您的 AEM 实例。

  • 服务器面板中,确保你的连接是[Started],如果没有启动它
  • 单击 清理并发布 图标(最后一个)

完成后,您应该在您的实例上 运行ning 包,保存时,任何更改都会自动同步到实例。

如果您希望从您的项目中重新构建一个包:

  • 右键单击 PROJECT.ui.appsPROJECT.ui.content 并选择 运行 As > Maven Install
  • 您现在已经创建了一个 target 文件夹,其中包含您的包(例如 PROJECT.ui.apps-0.0.1-SNAPSHOT.zip)。

如果您使用 aem-project-archetype:10 生成您的项目,那么会有一些 differences/corrections:

过滤器文件已正确生成(但路径不同):

  • ui.apps\src\main\content\META-INF\vault\filter.xml.
  • ui.content\src\main\content\META-INF\vault\filter.xml.

因此,您不需要修复这些文件。

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/product-name">
        <exclude pattern="/apps/product-name/install" />
    </filter>
    <filter root="/apps/sling" />
    <filter root="/etc/designs/product-name"/>
</workspaceFilter>


<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/content/product-name"/>
    <filter root="/content/dam/product-name"/>
</workspaceFilter>