Не удалось выполнить цель (generate-scr-scrdescriptor) в проекте. Невозможно загрузить скомпилированный класс.

Кто-нибудь столкнулся с ошибкой ниже. почему это вызывает.? Я использую указанную ниже версию плагинов.

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

[ОШИБКА] Не удалось выполнить цель 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]


person VAr    schedule 12.03.2017    source источник


Ответы (1)


Это означает, что плагин SCR не может найти скомпилированный файл класса, соответствующий файлу MyDataProviderServlet.java

Я видел это только в следующих ситуациях:

  1. У меня были специальные символы в пути к моему проекту, из-за чего плагин SCR не мог найти скомпилированные классы.
  2. У меня был *.java файл, но его содержимое было временно закомментировано. Плагин SCR ожидал найти скомпилированный *.class файл, но компилировать было нечего (только комментарии). Это вызвало сообщение об ошибке, точно такое же, как вы видели.

Я не могу придумать других случаев, когда файл класса не был бы найден подключаемым модулем SCR без предварительного сбоя подключаемого модуля компилятора.

Я бы поискал что-нибудь необычное в самом Java-классе. Это происходит с другими классами с аннотациями SCR или только с этим?

В качестве следующего шага я бы посмотрел на файловую систему. Может быть странный символ или ссылка на файл, сбивающая с толку плагин.

Наконец, я бы осмотрел остальную часть сборки Maven. Возможно, вы используете другие плагины, которые могут удалить или иным образом повредить файл класса до выполнения плагина SCR?

person toniedzwiedz    schedule 12.03.2017
comment
спасибо за отличное объяснение. наконец, я могу решить проблему, обновив версию maven до последней версии maven 3.3.9 и прокомментировав @service и @component в моем сервлете, где я использовал их вместе с @Servlet. Некомпилированная версия кода находится по адресу Некомпилированный код, где в моем настраиваемом сервлете внесены указанные выше изменения. Проголосуйте за хорошее объяснение. - person VAr; 14.03.2017
comment
@Var странно, в случае наличия всех этих аннотаций в одном классе, я бы ожидал, что плагин SCR будет жаловаться конкретно на излишние определения компонентов. - person toniedzwiedz; 14.03.2017
comment
да, позже я удалил все аннотации, кроме @Servlet, который отлично работает. но странное наблюдение касается только удаления @Component, а наличие @Service, @Servlet работает нормально. но это наводит меня на вопрос, почему @Servlet and @Component вместе не может компилироваться.? - person VAr; 14.03.2017
comment
@VAr Я так понимаю, ты имеешь в виду @SlingServlet. Семантика аннотации @SlingServlet заключается в том, что она неявно определяет тот же дескриптор как комбинацию @Service(Servlet.class) и @Component со свойствами, описывающими путь / селекторы / методы / и т. Д. В глазах плагина SCR аннотация @SlingServlet - это полное определение компонента. Наличие отдельной аннотации @Component приводит к двусмысленности и заставляет плагин выдавать ошибку. - person toniedzwiedz; 14.03.2017
comment
Да, прости. я имею в виду его @SlingServlet. да, это может быть причиной ошибки. как показано ниже. [ОШИБКА] E: \ MY-Work \ testporj \ osgiexample \ core \ src \ main \ java \ osgiexample \ core \ servlets \ MyDataProviderServlet.java [1: 1]: класс имеет более одного определения компонента. Проверьте аннотации и объедините определения в одно определение. - person VAr; 14.03.2017