如何修复 AEM 6.3 - Maven Archetype 12 "No DS descriptor found" 错误?
How to fix AEM 6.3 - Maven Archetype 12 "No DS descriptor found" errors?
我们已经使用 Maven Archetype 12 创建了一个 AEM 6.3 项目。我们还没有编写任何代码,只是试图构建导入 Eclipse 的空项目。
我们收到文档中提到的错误:
https://sling.apache.org/documentation/development/ide-tooling.html#why-do-i-get-an-error-about-no-ds-descriptor-found-at
No DS descriptor found at path target/classes/OSGI-INF/com.xxxxxxx.core.filters.LoggingFilter.xml
文档指出,“一种经常发生的情况是使用 maven-scr-plugin 的 Maven 项目在 target/classes 之外生成描述符,通常在 target/scr-plugin-generated . 要解决此问题,请确保您使用的是 maven-scr-plugin 1.15.0 或更新版本,并且您没有设置自定义 outputDirectory。"
不幸的是,我们开箱即用的生成项目似乎并非如此。根本没有生成描述符。将 maven-scr-plugin
升级到 1.15.0
甚至 1.26.0
都不会改变症状。
这个问题的正确解决方法是什么?
环境版本信息
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T12:39:06-07:00)
Maven home: C:\usr\apache-maven-3.5.0\bin\..
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_131\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
我可以始终如一地重现错误。 2-minute video
中包含所有步骤
当 OSGI 框架中没有实现声明式服务时,您会看到此错误。确保在您的 felix 控制台中看到 Apache Felix Declarative Services (org.apache.felix.scr)
捆绑活动和 运行。
或者(推荐),您可以使用 OSGI R6 的官方注释。根据 felix docs,Apache Felix SCR 插件的开发处于维护模式。如果您使用的是官方 osgi 注释,则不需要 mvn-scr-plugin
。
这个 article 应该可以让您快速开始使用官方注释。
如果将这两个空条目添加到 core/pom.xml
:
,问题就会消失
<Export-Package></Export-Package>
<Private-Package></Private-Package>
添加一个空 <Export-Package></Export-Package>
最初有效,但当我开始编写代码时就中断了。 Long-term 修复是以下的一些组合:
不要使用较新的 OSGI @Component
注释,继续使用 @SlingServlet
。
添加这个依赖
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
<version>1.12.0</version>
</dependency>
添加这个plug-in
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.26.0</version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<phase>compile</phase>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>
不确定这是否有所不同,但也升级到 Sling IDE Tools 1.2.0
我们已经使用 Maven Archetype 12 创建了一个 AEM 6.3 项目。我们还没有编写任何代码,只是试图构建导入 Eclipse 的空项目。
我们收到文档中提到的错误: https://sling.apache.org/documentation/development/ide-tooling.html#why-do-i-get-an-error-about-no-ds-descriptor-found-at
No DS descriptor found at path target/classes/OSGI-INF/com.xxxxxxx.core.filters.LoggingFilter.xml
文档指出,“一种经常发生的情况是使用 maven-scr-plugin 的 Maven 项目在 target/classes 之外生成描述符,通常在 target/scr-plugin-generated . 要解决此问题,请确保您使用的是 maven-scr-plugin 1.15.0 或更新版本,并且您没有设置自定义 outputDirectory。"
不幸的是,我们开箱即用的生成项目似乎并非如此。根本没有生成描述符。将 maven-scr-plugin
升级到 1.15.0
甚至 1.26.0
都不会改变症状。
这个问题的正确解决方法是什么?
环境版本信息
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T12:39:06-07:00)
Maven home: C:\usr\apache-maven-3.5.0\bin\..
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_131\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
我可以始终如一地重现错误。 2-minute video
中包含所有步骤当 OSGI 框架中没有实现声明式服务时,您会看到此错误。确保在您的 felix 控制台中看到 Apache Felix Declarative Services (org.apache.felix.scr)
捆绑活动和 运行。
或者(推荐),您可以使用 OSGI R6 的官方注释。根据 felix docs,Apache Felix SCR 插件的开发处于维护模式。如果您使用的是官方 osgi 注释,则不需要 mvn-scr-plugin
。
这个 article 应该可以让您快速开始使用官方注释。
如果将这两个空条目添加到 core/pom.xml
:
<Export-Package></Export-Package>
<Private-Package></Private-Package>
添加一个空 <Export-Package></Export-Package>
最初有效,但当我开始编写代码时就中断了。 Long-term 修复是以下的一些组合:
不要使用较新的 OSGI
@Component
注释,继续使用@SlingServlet
。添加这个依赖
<dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.scr.annotations</artifactId> <version>1.12.0</version> </dependency>
添加这个plug-in
<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-scr-plugin</artifactId> <version>1.26.0</version> <executions> <execution> <id>generate-scr-scrdescriptor</id> <phase>compile</phase> <goals> <goal>scr</goal> </goals> </execution> </executions> </plugin>
不确定这是否有所不同,但也升级到 Sling IDE Tools 1.2.0