【问题标题】:Failed to execute goal (generate-scr-scrdescriptor) on project Unable to load compiled class无法在项目上执行目标 (generate-scr-scrdescriptor) 无法加载已编译的类
【发布时间】:2017-03-12 00:23:03
【问题描述】:

是否有人面临以下错误。为什么会导致.?我正在使用以下版本的插件。

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.2</version>
    </plugin>

<plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
                <version>1.20.0</version>
                <executions>
                    <execution>
                        <id>generate-scr-scrdescriptor</id>
                        <goals>
                            <goal>scr</goal>
                        </goals>
                        <configuration>
                            <!-- Private service properties for all services. -->
                            <properties>
                                <service.vendor>Adobe</service.vendor>
                            </properties>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                           <outputDirectory>${project.build.directory}/classes</outputDirectory>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-simple</artifactId>
                        <version>1.5.11</version>
                    </dependency>
                </dependencies>
            </plugin>

[ERROR] 未能执行目标 org.apache.felix:maven-scr-plugin:1.20.0:scr (generate-scr-scrdescriptor) 项目 osgiexample.core: E:\MY-Work\TESTProj\osgiexample\core\src\main\java\osgiexample\core\servlets\MyDataProviderServlet.java :无法加载编译的类: osgiexample.core.servlets.MyDataProviderServlet -> [帮助 1]

【问题讨论】:

    标签: osgi maven-3 aem apache-felix felix-dependency-manager


    【解决方案1】:

    这表示SCR插件无法找到文件MyDataProviderServlet.java对应的编译类文件

    我只在以下情况下看到过这种情况:

    1. 我的项目路径中有特殊字符,导致 SCR 插件无法找到已编译的类。
    2. 我有一个*.java 文件,但它的内容被暂时注释掉了。 SCR 插件希望找到已编译的*.class 文件,但没有可编译的内容(只有 cmets)。这导致了一条与您看到的完全相同的错误消息。

    在我的脑海中,我想不出在没有 Compiler 插件首先失败的情况下 SCR 插件找不到类文件的其他情况。

    我会在 Java 类本身中寻找一些不寻常的东西。其他带有 SCR 注释的类是否会发生这种情况,还是仅此一个?

    下一步,我将查看文件系统。可能是一个奇怪的字符或一个混淆插件的文件链接。

    最后,我会检查 Maven 构建的其余部分。也许您正在使用其他插件,这些插件可能会在 SCR 插件执行之前删除或以其他方式破坏类文件?

    【讨论】:

    • 感谢您的精彩解释。终于能够通过将 maven 版本更新到最新的 maven 3.3.9 并在我的 servlet 中评论 @service@component 以及 @Servlet 来解决这个问题。未编译的代码版本可以在Uncompiled code 找到,在我的自定义 servlet 中,上述更改已归档。为好的解释投票。
    • @Var 很奇怪,如果将所有这些注释都放在一个类上,我希望 SCR 插件会特别抱怨多余的组件定义。
    • 是的,后来我删除了除 @Servlet 之外的所有注释,它工作正常。但奇怪的观察是只删除@Component 并让@Service, @Servlet 工作正常。但这给我带来了一个问题,为什么@Servlet and @Component 一起无法编译。?
    • @VAr 我认为你的意思是@SlingServlet@SlingServlet 注释的语义是,它隐式定义了相同的描述符作为 @Service(Servlet.class)@Component 的组合以及描述路径/选择器/方法/等的属性。在 SCR 插件眼中,@SlingServlet 注解就是一个完整的组件定义。有一个单独的@Component 注释会导致歧义并导致插件抛出错误。
    • 是的,抱歉。我的意思是它的@SlingServlet。是的,这可能是错误的原因。如下。 [错误] E:\MY-Work\testporj\osgiexample\core\src\main\java\osgiexample\core\servlets\MyDataProviderServlet.java [1:1]:类有多个组件定义。检查注释并将定义合并为一个定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2013-06-05
    • 1970-01-01
    • 2013-12-24
    • 2015-05-07
    • 2022-01-15
    • 2020-12-04
    相关资源
    最近更新 更多