AEM中缺少服务组件

时间:2016-07-20 07:12:26

标签: eclipse aem

我正在尝试使用Eclipse插件在AEM Developer Tools中创建项目。该项目已在AEM服务器中发布,可在以下网址中找到:WebsitesCRXDE Lite

项目是使用Maven Archetype-10中的Eclipse创建的,默认项目有两页英语和法语。当我在Site URL中打开页面时,我会收到end page,其中应显示来自HelloWorldModel类的消息以及其他文本。但我没有收到各自班级的消息。相反,我收到以下错误消息:

  

org.apache.sling.api.scripting.ScriptEvaluationException:org.apache.sling.scripting.sightly.SightlyException:找不到与存储库中的com.pen.mypen.core.models.HelloWorldModel类对应的文件。 / p>

看起来CORE项目中的Java文件未发布或网页不可见。但是CoreAppsContent这3个包都在Eclipse中发布和同步。有没有办法检查Java包是否部署到AEM服务器?请引导我到这里我缺少的东西。请在下面找到错误堆栈跟踪:

Caused by: org.apache.sling.scripting.sightly.SightlyException: Cannot find a a file corresponding to class com.pen.mypen.core.models.HelloWorldModel in the repository.
at org.apache.sling.scripting.sightly.impl.compiler.SightlyJavaCompilerService.compileRepositoryJavaClass(SightlyJavaCompilerService.java:212)
at org.apache.sling.scripting.sightly.impl.compiler.SightlyJavaCompilerService.getInstance(SightlyJavaCompilerService.java:113)
at org.apache.sling.scripting.sightly.impl.engine.extension.use.JavaUseProvider.provide(JavaUseProvider.java:127)
at org.apache.sling.scripting.sightly.impl.engine.extension.use.UseRuntimeExtension.call(UseRuntimeExtension.java:84)
at org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl.call(RenderContextImpl.java:66)
at org.apache.sling.scripting.sightly.apps.pen.components.content.helloworld.SightlyJava_helloworld.render(SightlyJava_helloworld.java:53)
at org.apache.sling.scripting.sightly.impl.engine.runtime.RenderUnit.render(RenderUnit.java:54)
at org.apache.sling.scripting.sightly.impl.engine.SightlyScriptEngine.evaluateScript(SightlyScriptEngine.java:92)
at org.apache.sling.scripting.sightly.impl.engine.SightlyScriptEngine.eval(SightlyScriptEngine.java:78)
at org.apache.sling.scripting.core.impl.DefaultSlingScript.call(DefaultSlingScript.java:388)

更新

  • AEM - 6.2
  • Eclipse - Luna

  • Java - 1.8

3 个答案:

答案 0 :(得分:1)

您可以查看以下内容:

  1. http://SERVER:PORT/system/console/bundles显示AEM计算机上安装的所有Java包。检查您的捆绑包是否列在那里。如果没有那么它就无法安装=>检查错误日志
  2. 如果您的捆绑包列在那里,请检查状态是否为active,否则可能缺少依赖关系或类似的东西。 =>单击包名称以查看wron的更多详细信息,还要检查错误日志。
  3. 如果状态为active,请单击该捆绑包,查看Exported Packages部分中是否列出了包含您的java类的包。
  4. 如果列出了软件包,则可能需要再次检查错误日志。
  5. 更新(因为AEM 6.2):

    您的项目存在的问题是,对于6.2之前的AEM版本,存在对javax.inject版本0的依赖关系,而现在他们需要版本1并且没有反映在pom.xml。 只需将其添加到pom.xml项目的core - ,这是您必须做的唯一更改

    <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
       <version>1</version>
    </dependency>
    

    一切都会奏效。对不起,混乱......

答案 1 :(得分:1)

如果您使用的是SlingModel,javax.inject

会公开org.apache.sling.models.api

您可以检查您的pom是否存在SlingModel依赖项

 <dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.models.api</artifactId>
    <version>VERSION_NUMBER</version>
    <scope>provided</scope>
 </dependency>
 <dependency>
    <groupId>org.apache.sling</groupId>
    <artifactId>org.apache.sling.models.impl</artifactId>
    <version>VERSION_NUMBER</version>
    <scope>provided</scope>
 </dependency>

检查您正在使用的VERSION_NUMBER,然后在/system/console/bundles中验证是否存在相同的版本包并且已激活。

使用AEM 6.x时,Sling Model捆绑包默认可用。 6.0将具有1.0.x的较低版本。通过更新pom或安装版本为VERSION_NUMBER的SlingModel软件包来修复版本可以解决您的问题。

  

更新6.2

对于版本为1.2.2的模型的6.2,请在依赖项中使用以下内容 -

  <dependency>
        <groupId>org.apache.sling</groupId>
        <artifactId>org.apache.sling.models.api</artifactId>
        <version>1.2.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.sling</groupId>
        <artifactId>org.apache.sling.models.impl</artifactId>
        <version>1.2.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-atinject_1.0_spec</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>

geronimo-atinject_1.0_spec是在吊索模型1.2.2中展示javax.inject的那个

答案 2 :(得分:1)

分享我的解决方案,这将有所帮助。 经过AEM 6.2测试,完美无缺。

在核心pom.xml文件中,在“ org.apache.felix ”中添加“ javax.inject; version = 0.0.0,* ”的Import-Package标记插件标签。

以下是样本:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <!--
         <Embed-Dependency>
            artifactId1,artifactId2;inline=true
         </Embed-Dependency>
      -->
      <!-- Import any version of javax.inject, to allow running on multiple versions of AEM -->
      <Import-Package>javax.inject;version=0.0.0,*</Import-Package>

      <Sling-Model-Packages>
         com.next.sample_test_impl.core
      </Sling-Model-Packages>
    </instructions>
  </configuration>
</plugin>