2016-07-20 10 views
1

Ich versuche, ein Projekt in Eclipse mit dem AEM Developer Tools Plugin zu erstellen. Das Projekt ist in AEM Server veröffentlicht und kann in: Websites und CRXDE Lite.Service-Komponente fehlt in AEM

Das Projekt wurde mit Maven Archetype-10 in Eclipse erstellt und das Standardprojekt hat zwei Seiten in Englisch und Französisch. Wenn ich die Seite in der Site URL öffne, bekomme ich die end page, wo die Nachricht aus der HelloWorldModel Klasse angezeigt werden sollte, zusammen mit dem anderen Text. Aber ich bekomme die Nachricht von der jeweiligen Klasse nicht. Stattdessen erhalte ich folgende Fehlermeldung:

org.apache.sling.api.scripting.ScriptEvaluationException: org.apache.sling.scripting.sightly.SightlyException: Kann nicht aa Datei entsprechend Klasse com.pen finden .mypen.core.models.HelloWorldModel im Repository.

Es sieht so aus, als ob die Java Dateien im CORE-Projekt nicht veröffentlicht werden oder für die Webseite nicht sichtbar sind. Aber die 3 Pakete: Core, Apps und Content sind alle in Eclipse veröffentlicht und synchronisiert. Gibt es eine Möglichkeit zu überprüfen, ob das Java-Paket auf AEM Server bereitgestellt wird? Bitte führe mich zu dem, was mir hier fehlt. Sie finden den Fehler-Stack-Trace:

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
  • Eklipse - Luna

  • Java - 1,8

+0

Bitte beachten Sie meine neueste Update, das Ihr Problem lösen soll. –

+0

@OliverGebert, danke für das Update. Ameesh Antwort funktioniert gut für mich. Glauben Sie, dass Ihre Lösung besser und standardgemäß ist? Wenn ja, dann werde ich Ihre Lösung implementieren und testen. Bitte beraten. – Anand

+0

Das Hinzufügen der Abhängigkeiten im Zusammenhang mit dem Sling-Modell ist ziemlich schlecht, da Sie sich an die API und nicht an die spezifische Implementierung halten sollten. Gleiches gilt für Geronimo. Es sollte Ihnen egal sein, welches Bundle Ihre Abhängigkeiten aufdeckt, was zu weiteren Problemen führen kann, wenn diese Bundles mit einem Hotfix aktualisiert werden. Ich würde meinen eigenen Ansatz bevorzugen, weil ich mich nicht allzu sehr mit dem Standardprodukt einmischen möchte, aber ich würde nicht sagen, dass meine Lösung "besser" ist ... –

Antwort

1

Falls Sie SlingModels verwenden die javax.inject durch die org.apache.sling.models.api

ausgesetzt ist, können Sie Ihre pom überprüfen die SlingModel Abhängigkeiten

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

Überprüfen Sie die VERSION_NUMBER Sie verwenden und dann in /system/console/bundles verifizieren, dass das gleiche Versionspaket vorhanden und aktiv ist.

Mit AEM 6.x sind die Sling Model-Bundles standardmäßig verfügbar. Das 6.0 wird eine niedrigere Version 1.0.x haben. Wenn Sie die Version reparieren, indem Sie das Pom aktualisieren oder die SlingModel-Bundles mit der Version VERSION_NUMBER installieren, beheben Sie das Problem.

Update für 6,2

Für 6.2 mit Modellen mit Version 1.2.2 Verwendung in Abhängigkeiten folgenden -

<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 ist derjenige, der javax.inject in Hebegurtmodelle 1.2.2 aussetzt

+0

Danke für die Antwort. Ich habe es bereits mit der Impl-Abhängigkeit versucht. Ich habe die obige Abhängigkeit erneut mit Version 1.2.2 und mit api als 1.0.0 hinzugefügt. Es funktioniert nicht. Ich bekomme immer noch den Fehler. Wenn ich api in 1.2.2 ändere, erhalte ich den Compilerfehler in der HelloWorldModel Klasse, wo die Annotation Inject Teil der API 1.0.0 und nicht Teil von 1.2.2 ist. Zu Ihrer Information, ich benutze AEM 6.2. Modelle. api und impl-Bundles sind in den Abschnitten/system/console/bundle aktiv. Bitte lassen Sie mich wissen, was ich vermisse. – Anand

+0

Bitte beachten Sie die Updates zu meiner Antwort oben, dies sollte Ihr Problem lösen. Ich war in der Lage, das Sling-Modell mit den oben genannten Abhängigkeiten erfolgreich auf AEM 6.2 zu konfigurieren. Lassen Sie es mich wissen, falls Sie weitere Informationen benötigen. –

+0

Ich habe die neue Bibliothek früher aber alleine gemeistert. Ich habe nicht impl hinzugefügt. Deshalb hat es nicht funktioniert. Nachdem ich alle drei Bibliotheken in der pom.xml hinzugefügt habe, kann ich das Paket bereitstellen und es in der Webkonsole aktivieren. Danke für deine Hilfe, Kumpel. – Anand

1

Sie können folgende Dinge überprüfen:

  1. http://SERVER:PORT/system/console/bundles zeigt alle Java-Pakete, die auf Ihrem AEM Maschine installiert sind. Überprüfen Sie, ob Ihr Paket dort aufgeführt ist. Wenn nicht, dann konnte es nicht installiert werden => Überprüfen Sie das Fehlerprotokoll
  2. Wenn Ihr Bundle dort aufgelistet ist, überprüfen Sie, ob es den Status active ist, wenn nicht Abhängigkeiten fehlen oder solche Sachen fehlen. => klicke auf den Bundle-Namen, um mehr Details zu sehen, was wron ging, überprüfe auch das Fehlerprotokoll.
  3. Wenn der Status active ist, klicken Sie auf das Bundle und sehen Sie, ob das Paket, das Ihre Java-Klasse enthält, im Abschnitt Exported Packages aufgeführt ist.
  4. Wenn das Paket aufgelistet ist, müssen Sie das Fehlerprotokoll (erneut) überprüfen.

UPDATE (wegen AEM 6.2): ​​

Das Problem mit dem Projekt ist, dass mit AEM-Versionen vor 6.2, eine Abhängigkeit zu javax.inject Version war 0 während jetzt brauchen sie Version 1 und das spiegelt sich nicht in der pom.xml wider. Fügen Sie einfach diese zu Ihrem pom.xml des core Projekt - , dass die einzige Änderung ist Sie zu tun haben werden:

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

und alles funktioniert. Sorry für die Verwirrung ...

+0

Vielen Dank für Ihre hilfreichen Kommentare. Der Status des Bundles ist INSTALLIERT. Unter Importierte Pakete ist ein Fehler aufgetreten. Fehler - javax.inject, version = [0.0,1) - Kann nicht aufgelöst werden. Nur das ist in rot. Können Sie mir bitte den Sightly-Code zeigen? Ich habe nichts außer dem generierten Code geschrieben. Ich versuche gerade, das Standardprojekt in AEM zu implementieren und zu sehen, ob es gut ankommt. – Anand

+0

Mit welcher AEM/CQ-Version und welchem ​​Service Pack läuft Ihre Maschine? –

+0

Ich benutze AEM 6.2. Ich habe versucht, das Projekt nach dem Hinzufügen der Abhängigkeit in Pom-Datei neu zu erstellen. Ich kann die Klasse javax.inject unter der org ... scripting.java 2.0.12 sehen. Auch dieses Paket wurde in AEM nicht korrekt installiert. Ich bekomme den gleichen Fehler, der inject.class kann nicht aufgelöst werden. Ich habe die lib mit Version 2.0.14 aktualisiert, aber ich sehe den javax nicht.Klasse in die Bibliothek einfügen. Auch nach dem Neuaufbau mit der Version 2.0.14 erhalte ich den gleichen Fehler und mein Bundle ist nicht aktiv. – Anand

1

Teilen meiner Lösung, die hilfreich sein wird. Getestet auf AEM 6.2 funktioniert perfekt.

In Kern pom.xml Datei hinzufügen Tag Import-Package mit "javax.inject; version = 0.0.0, *" innen "org.apache.felix" Plugin-Tag.

Es folgt die Probe:

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