首页 文章

AEM中缺少服务组件

提问于
浏览
1

我正在尝试使用 AEM Developer Tools 插件在 Eclipse 中创建一个项目 . 该项目发布在 AEM 服务器中,可以在: WebsitesCRXDE Lite 中看到 .

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

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

看起来CORE项目中的 Java 文件未发布或对网页不可见 . 但是3个包: CoreAppsContent 都在 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)

UPDATE

  • AEM - 6.2

  • Eclipse - Luna

  • Java - 1.8

3 回答

  • 1

    如果您使用的是SlingModels, 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 中验证是否存在相同的版本包和Active .

    使用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 的那个

  • 1

    您可以检查以下内容:

    • http://SERVER:PORT/system/console/bundles 显示AEM机器上安装的所有Java包 . 检查您的捆绑包是否列在那里 . 如果没有则无法安装=>检查错误日志

    • 如果您的捆绑包列在那里,请检查它的状态是否为 active ,否则可能缺少依赖关系或类似的东西 . =>单击包名称以查看wron的更多详细信息,还要检查错误日志 .

    • 如果状态为 active ,请单击该包,并查看 Exported Packages 部分中是否列出了包含您的java类的包 .

    • 如果列出了软件包,则可能需要再次检查错误日志 .

    UPDATE (because of AEM 6.2):

    您的项目存在的问题是,对于6.2之前的AEM版本,存在对 javax.inject 版本 0 的依赖关系,而现在它们需要版本1,而这并未反映在 pom.xml 中 . 只需将此添加到 core 项目的 pom.xml 中 - 您将需要执行的操作:

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

    一切都会奏效 . 对困惑感到抱歉...

  • 1

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

    在核心pom.xml文件中,使用“ javax.inject;version=0.0.0,* " inside " org.apache.felix ”插件标记添加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>
    

相关问题