从AEM下载时,如何在eclipse中使用bundle

时间:2015-04-17 12:51:09

标签: eclipse maven osgi aem sling

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

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

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

我尝试使用Adobe Brackets(扩展名为AEM),但它只适用于JS或JSP更改...不适用于JAVA文件。

更新

在@ Gabriel的评论之后,这是我对如何移动的理解 我下载的通过eclipse创建的新项目。

enter image description here

完成上述

以下是我复制/粘贴所有内容后新eclipse项目的样子

enter image description here

来自已下载软件包的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>

干净/发布似乎没有任何效果,因为我在干净/发布后没有在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

当我上传&amp;将这两个文件安装到CRX我看到以下内容:

enter image description here enter image description here

但是,这似乎也没有任何效果,因为我在localhost:4502/siteadmin中看不到任何内容,当我访问localhost:4502/content/myproj时出现错误

``

BTW这是我在localhost:4502/siteadmin

下看到的

enter image description here

更新2

在重复完成所有内容后,我能够创建eclipse项目,并且在清理/发布方面取得了成功。但是,当我清理/发布时,对JAVA文件的更改没有反映出来。

@Gabriel提到了

  

PROJECT.core for Java bundle(这些将很快变得有趣   因为你想添加Java代码)

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

enter image description here

如果我对此JAVA文件进行了更改并清理/发布,则我的更改不会反映在AEM中。是否还需要做一些其他事情才能更改和发布JAVA代码?或者如何更改JAVA文件并在AEM上测试?

3 个答案:

答案 0 :(得分:9)

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

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

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

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

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

  • 项目浏览器面板中,展开PROJECT.ui.apps&gt; src&gt; main&gt; content&gt; jcr_root&gt; apps
  • 右键点击apps文件夹,然后选择显示&gt; 系统调查员
  • 删除您现在应该看到的appsetc文件夹,并将其放在内容包的appsetc个文件夹中
  • 在Eclipse中,右键单击PROJECT.ui.apps项目,然后选择刷新

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

  • 项目浏览器面板中,展开PROJECT.ui.content&gt; src&gt; main&gt; content&gt; jcr_root&gt; content
  • 右键点击更深的content文件夹,然后选择显示&gt; 系统调查员
  • 删除您现在应该看到的content文件夹,并将其放在您的内容包的content文件夹中
  • 在Eclipse中,右键单击PROJECT.ui.content项目,然后选择刷新

现在,您必须更新这两个项目的filter.xml个文件,以与内容包的内容相对应。 为此,请在单独的文本/代码编辑器中打开内容包的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
  • 开头的包裹

根据上面的示例,这就是filter.xml的{​​{1}}看起来的样子:

PROJECT.ui.apps

<?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

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

  • 服务器面板中,确保您的连接为<?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> ,如果没有启动
  • 点击清洁并发布图标(最后一个)

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

如果您希望从项目中重新构建软件包:

  • 右键点击[Started]PROJECT.ui.apps,然后选择运行方式&gt; Maven安装
  • 您现在拥有一个PROJECT.ui.content文件夹,该文件夹是在您的包内创建的(例如target)。

答案 1 :(得分:0)

我想你需要为下载的bundle创建新的pom文件。 Here您可以看到如何创建捆绑包。此外,在创建文件后,您将能够在任何更改后使用maven部署捆绑包。

答案 2 :(得分:0)

如果您使用aem-project-archetype:10来生成项目,那么将会有一些差异/更正:

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

  • ui.apps \ SRC \主\内容\ META-INF \拱顶\ filter.xml。
  • ui.content \ SRC \主\内容\ META-INF \拱顶\ 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>