Не удалось получить ссылку на файл класса, сгенерированный в целевой папке проекта Maven в GWT

Я использую Google Gin для создания события в моем проекте GWT следующим образом:

package com.lokur.motd.client.events;

import com.gwtplatform.dispatch.annotation.GenEvent;

@GenEvent
public class EditorChange {
}

Теперь, когда я компилирую свой проект с помощью «mvn clean install -e», он генерирует необходимые классы, а именно. EditorChangeEvent.class, EditorChangeEvent$EditorChangeHandler.class, EditorChangeEvent$HasEditorChangeHandlers.class в целевой папке моего проекта.

Но когда я пытаюсь получить доступ к определенному сгенерированному классу, например. EditorChangeEvent в моем проекте выдает ошибку компиляции с сообщением:

«Пакет com.lokur.motd.client.events.EditorChangeEvent не существует»

...

Я не понимаю такого поведения. Нужно ли нам явно добавлять «целевую» папку Maven в путь к классам или где-то в pom.xml, или что-то еще вызывает это?

Вот плагины из maven pom.xml:

<plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>gwt-maven-plugin</artifactId>
                        <version>${gwt.plugin.version}</version>
                        <configuration>
                            <runTarget>myMessage/myMessage.html</runTarget>
                            <disableCastChecking>true</disableCastChecking>
                            <disableClassMetadata>true</disableClassMetadata>
                            <!-- <logLevel>INFO" -bindAddress 0.0.0.0 -logLevel "INFO</logLevel> -->
                            <logLevel>ERROR</logLevel>
                            <style>OBF</style>
                            <!-- OBF, PRETTY, DETAILED -->
                            <noServer>false</noServer>
                            <additionalPageParameters>log_level=OFF</additionalPageParameters>
                            <extraJvmArgs>-Xmx512m -Ddev.mode=true -DuseCache=false</extraJvmArgs>
                            <extraTestArgs>-Xmx512m -Ddev.mode=true</extraTestArgs>
                            <gwtVersion>${gwtVersion}</gwtVersion>
                            <testFilter>*</testFilter>
                            <hostedWebapp>
                                ${project.build.directory}/${project.build.finalName}
                            </hostedWebapp>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>compile</goal>
                                    <goal>test</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>Unzip usp Config &amp; Env Modules</id>
                                <phase>generate-resources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>com.dig.configs</groupId>
                                            <artifactId>common-configs</artifactId>
                                            <version>${commonConfigs.version}</version>
                                            <type>zip</type>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${basedir}/target/tmp</outputDirectory>
                                        </artifactItem>
                                        <artifactItem>
                                            <groupId>${pom.groupId}</groupId>
                                            <artifactId>usp-env</artifactId>
                                            <version>${pom.version}</version>
                                            <type>zip</type>
                                            <outputDirectory>${basedir}/target/tmp</outputDirectory>
                                        </artifactItem>
                                    </artifactItems>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>Copy Config, Env Modules</id>
                                <phase>generate-resources</phase>
                                <configuration>
                                    <tasks>
                                        <copy todir="${basedir}/target/myMessage/WEB-INF/classes/config" overwrite="true" verbose="true" failonerror="true">
                                            <fileset dir="${basedir}/target/tmp/config">
                                                <include name="**" />
                                            </fileset>
                                            <fileset dir="${basedir}/target/tmp/env">
                                                <include name="**" />
                                            </fileset>
                                        </copy>
                                        <copy todir="${basedir}/target/myMessage/WEB-INF/classes/config" overwrite="true" verbose="true" failonerror="true">
                                            <fileset dir="../config/test" includes="**" />
                                        </copy>
                                        <copy file="${basedir}/../config/usp-app-config.xml" todir="${basedir}/target/myMessage/WEB-INF/classes/config" />
                                        <copy file="${basedir}/../usp-env/src/test/env/usp-app-config.properties" todir="${basedir}/target/myMessage/WEB-INF/classes" />
                                        <copy file="${basedir}/../usp-env/src/test/env/app-config.properties" todir="${basedir}/target/myMessage/WEB-INF/classes" />
                                    </tasks>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>

person Akshay Lokur    schedule 22.01.2014    source источник
comment
Что вы подразумеваете под «попытаться получить доступ»? Вы имеете в виду из вашей IDE?   -  person Nick Holt    schedule 22.01.2014
comment
@Ник Холт: Да. Доступ к другому файлу класса в том же проекте для создания его экземпляра или для какой-либо другой цели.   -  person Akshay Lokur    schedule 22.01.2014
comment
И какой плагин Maven вы используете для создания классов?   -  person Nick Holt    schedule 22.01.2014
comment
@Nick Holt: я не эксперт в Maven. Есть ли такой плагин для создания классов? Не могли бы вы привести пример...   -  person Akshay Lokur    schedule 22.01.2014
comment
Вы сказали, что ваша сборка Maven генерирует EditorChangeEvent и т. д. - она ​​не будет делать это по умолчанию, обычно вам нужно добавить плагин - какой плагин был добавлен в ваш pom.xml?   -  person Nick Holt    schedule 22.01.2014
comment
@NickHolt: добавлены плагины из pom.xml в сообщении выше. Пожалуйста, посмотрите.   -  person Akshay Lokur    schedule 22.01.2014
comment
давайте продолжим это обсуждение в чате   -  person Akshay Lokur    schedule 22.01.2014


Ответы (3)


Я недостаточно знаком с GWT, чтобы знать, генерирует ли этот плагин классы EditorChangeEvent, но я предполагаю, что это так.

Тем не менее, я слишком хорошо знаком как с IntelliJ, так и с Maven. Поэтому я могу объяснить, как может возникнуть эта проблема и как ее решить.

Если вы собираетесь собрать все как единый проект, вам нужно найти исходные файлы для классов EditorChangeEvent. Плагины, которые генерируют классы, часто помещают источник для этих классов в target/generated-sources, но я не могу сказать наверняка в случае с GWT (иногда это опция плагина, чтобы указать, сохраняется ли источник или нет). В этом случае подключаемый модуль должен был добавить корень исходного кода компиляции в проект Maven. IntelliJ распознает это и пометит каталог target/generated-sources как исходный корень в проекте IntelliJ. Если каталог target/generated-sources существует, но не был автоматически помечен как исходный корень, вы можете сделать это, щелкнув каталог правой кнопкой мыши и выбрав Пометить каталог как.

Другая возможность заключается в том, что источник никогда не существует. Если это так, то вам придется разбить свой проект на два: один проект, содержащий сгенерированные классы, и один, содержащий классы, которые используют сгенерированные классы. Очевидно, что этот второй проект зависит от первого, использующего механизм зависимостей Maven.

person Nick Holt    schedule 22.01.2014
comment
Я видел в целевой папке, но внутри нее нет папки generate-sources. Кроме того, в моей IntelliJ IDE я не вижу целевой папки. Хотя он есть в файловой системе. - person Akshay Lokur; 23.01.2014
comment
IntelliJ правильно скрывает от вас целевую папку - она ​​была бы отображена, если бы корень исходного кода компиляции был добавлен плагином в каталог target. Учитывая, что его там нет, я думаю, вам придется разделить свой проект. - person Nick Holt; 23.01.2014
comment
Здесь добавлен еще один связанный вопрос: stackoverflow.com/questions/21326341/ - person Akshay Lokur; 24.01.2014

http://mojo.codehaus.org/gwt-maven-plugin/compile-mojo.html говорит

создать каталог

Папка, в которой будет создан сгенерированный исходный код (автоматически добавляется для компиляции classpath). ${project.build.directory}/сгенерированные источники/gwt

Таким образом, Maven должен правильно скомпилировать ваш проект. Однако, поскольку Nick указывает target/generated-sources/gwt в качестве исходного каталога в вашей среде IDE, у вас возникнут проблемы с компиляцией.

Вам нужно обновить свой вопрос, указав более конкретные детали, поскольку вам не ясно, где именно в целевой папке создаются классы; или что дает вам ошибки компиляции (Maven или ваша IDE - и какую IDE вы используете)

person Bae    schedule 24.01.2014
comment
Я добавил следующие плагины: ‹groupId›org.bsc.maven‹/groupId› ‹artifactId›maven-processor-plugin‹/artifactId› и ‹groupId›org.codehaus.mojo‹/groupId› ‹artifactId›build-helper-maven -plugin‹/artifactId› Итак, теперь maven создает папку сгенерированных источников в целевом каталоге. Но теперь он генерирует одни и те же исходные файлы Java в классах/цели/, а также в папке сгенерированных источников. Таким образом, получая ошибку компиляции. Смотрите мой второй комментарий ниже.. - person Akshay Lokur; 24.01.2014
comment
Я имею в виду, что генерируются два файла EditorChangeEvent.java. Один в папке «сгенерированные источники», а другой в папке target/classes/‹..package..›. Таким образом, вызывая следующую ошибку компиляции: .../target/‹package›/events/EditorChangeEvent.java:[9,7] дублирующийся класс: ‹package›.EditorChangeEvent - person Akshay Lokur; 24.01.2014
comment
Здесь добавлен еще один связанный вопрос: stackoverflow.com/questions/21326341/ - person Akshay Lokur; 24.01.2014
comment
Пожалуйста, обновите свой вопрос с правильной информацией, а не в этих комментариях. Является ли ваш проект открытым исходным кодом, на который можно посмотреть? Вам необходимо применить стандартные методы отладки для решения ваших проблем. Начните с удаления всего из вашего Maven pom.xml, а затем добавляйте элементы обратно по одному. Вы узнаете, где находится виновник. - person Bae; 04.02.2014

Проблема была с версией GWT, поддерживаемой нашим проектом. Он не поддерживал @GenEvent, так как проект не был настроен на использование Gin. Итак, создайте классы Event и Handler вручную, вместо того, чтобы полагаться на аннотации Джина. Теперь это работает хорошо. Закрытие этой темы. Спасибо вам всем.

person Akshay Lokur    schedule 04.02.2014