Подтвердить что ты не робот

Как заставить Eclipse разрешать классы, созданные с помощью Maven 2?

Я использую буферы протокола Google для создания некоторых классов Java для моего проекта. Используя Maven 2 и его плагин "antrun", эти классы только что сгенерированы перед компиляцией, выводятся в целевые/сгенерированные источники и помещаются в путь к классам во время сборки. Поэтому создание проекта с ПОМ не представляет проблемы.

Однако Eclipse не знает, как разрешить сгенерированный класс, потому что папка, в которой он находится, по-видимому, не находится на пути класса IDE во время разработки. Я использую m2eclipse и управляю зависимостями для меня, поэтому я ожидал, что Maven позаботится об этом.

Как я могу получить поддержку IDE (завершение кода и т.д.) для сгенерированного кода?

4b9b3361

Ответ 1

То, что вы должны увидеть в своем проводнике проектов, представляет собой контейнер с именем "Maven Dependencies" вместо обычных "Реферированных библиотек". Это означает, что m2eclipse управляет вашим контуром сборки.

В моем случае для этого я проверил "Включить модули" и снял флажок "Плагин компилятора Skip Maven при обработке ресурсов" в разделе "Maven" в Project- > Properties.

Ответ 2

m2eclipse не поддерживает это. Вы должны вручную добавить папку target/generated-sources в качестве исходной папки. Когда вы укажете m2eclipse на "Обновить конфигурацию проекта", это будет перезаписано, и вы должны восстановить его.

Кроме того, убедитесь, что Eclipse ищет изменения в рабочей области.

Однако могут быть некоторые проблемы. В конце концов, вы столкнетесь с ошибками, которые не могут быть скомпилированы каким-либо классом, потому что другой класс не может быть разрешен. Однако завершение кода будет работать. Основной причиной этой проблемы является то, что Eclipse запутывается, когда Maven меняет файлы классов в target.

Чтобы решить эту проблему, вы должны сообщить Eclipse компиляции в другое место, чем Maven.

Ответ 3

m2eclipse поддерживает это. Сначала добавьте путь к пути сборки:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

Во-вторых, добавьте поддержку для m2e:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                      <pluginExecutions>
                        <pluginExecution>
                          <pluginExecutionFilter>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>build-helper-maven-plugin</artifactId>
                            <versionRange>[1.0,)</versionRange>
                            <goals>
                              <goal>parse-version</goal>
                              <goal>add-source</goal>
                              <goal>maven-version</goal>
                              <goal>add-resource</goal>
                              <goal>add-test-resource</goal>
                              <goal>add-test-source</goal>
                            </goals>
                          </pluginExecutionFilter>
                          <action>
                            <execute>
                              <runOnConfiguration>true</runOnConfiguration>
                              <runOnIncremental>true</runOnIncremental>
                            </execute>
                          </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

Второй шаг может быть не нужен, если в вашей установке eclipse установлен плагин "org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml". Этот плагин доступен через Window → Preferences → Maven → Discovery. В настоящее время это не работает здесь, в Eclipse Kepler, поэтому я получил JAR (связанный с xml, указанным в URL-адресе каталога), и извлек фрагменты из org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml вручную.

Ответ 4

Лично я решил эту проблему, настроив сгенерированные классы как отдельный проект и сделал его зависимым в моем основном (не сгенерированном) проекте. Я использовал wsdl2java для генерации классов webservice, поэтому "источником" в моем подпроекте были wdsl и xsds. Хорошо работал, даже когда wsdl постоянно менялся.

Ответ 5

У меня была эта проблема с кодом, сгенерированным с использованием Maven и wsdl2java, и вот что я сделал в Eclipse Juno для его решения. Предположим, что мой проект называется project1:

  • Щелкните правой кнопкой мыши проект1 и выберите "Свойства"
  • Выберите "Путь сборки Java" слева и выберите вкладку "Библиотеки"
  • Нажмите "Добавить класс"
  • Выберите каталог bin и нажмите OK (project1/target/generated-sources/bin)
  • Нажмите "ОК" и "Обновить проект"

В качестве дополнительного бонуса вы также можете прикрепить исходный код:

  • Щелкните стрелку рядом с созданной вами новой папкой класса
  • Нажмите ссылку "Источник"
  • Нажмите кнопку "Изменить"
  • Задайте путь к /project 1/target/generated-sources/axis2/src
  • Нажмите "ОК"

Ответ 6

Вы пытались обновить проект Eclipse?

alt text
(источник: oyvindhauge.com)

Когда внешний инструмент генерирует новые файлы или обновляет старые, Eclipse не сможет обнаружить изменение до следующего запроса.

Другой вариант - определить новый пользовательский компоновщик, указав для этого компоновщика "обновление ресурсов по завершении":

альтернативный текст http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif

Ответ 7

  • Щелкните правой кнопкой мыши проект и выберите "Свойства"
  • Выберите "Путь сборки Java" слева и выберите вкладку "Источник"
  • Нажмите "Добавить папку"
  • Выберите каталог bin и нажмите OK
  • (project/target/generated-sources/xxxx) Нажмите "ОК" и "Обновить проект"

Ответ 8

  Как получить поддержку IDE (завершение кода и т.д.) Для сгенерированного кода?

Обычно я бы добавил плагин m2e для отображения жизненного цикла в файл pom.xml, как описано в ответе @koppor. Тем не менее, добавление кода для каждого затмения в мои файлы pom.xml не вариант для работы, в основном это магазин IntelliJ.

Мое решение сначала добавляет build-helper-maven-plugin в файл pom.xml, который отлично работает из командной строки, но не в затмении.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

Чтобы исправить затмение, я установил Apt M2E Connector с Eclipse Marketplace. Я думаю, что все заработало сразу после перезапуска, а затем перестроил все мои проекты. Теперь я вижу следующее в моих источниках:

src/main/java
target/generated-sources
...

функция!

Ответ 9

Для генерации исходных файлов Java из файлов .proto используйте плагин Protocol Buffers, который работает в .proto Oxygen.

Основное использование (см. Здесь для подробного описания):

  • убедитесь, что в вашей системе установлен protoc компилятор protoc

  • обновите файл pom.xml:

    • убедитесь, что вы используете хотя бы Java 6 (рекомендуется Java 7+)

    • добавить вызов плагина

    • добавьте соответствующую зависимость для com.google.protobuf:protobuf-java

  • поместите ваши .proto файлы в директорию проекта src/main/proto

  • обновить проект (через Maven → Update project...)

Пример pom.xml:

<project>
  ...
  <build>
    <plugins>
      <!-- Require at least Java 6 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
      <!-- Generate .java files from .proto definitions -->
      <plugin>
        <groupId>org.xolstice.maven.plugins</groupId>
        <artifactId>protobuf-maven-plugin</artifactId>
        <version>0.5.1</version>
        <configuration>
          <protocExecutable>/usr/local/bin/protoc</protocExecutable>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>test-compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>3.5.1</version>
    </dependency>
    ...
  </dependencies>
  ...
</project>

Некоторые дополнительные заметки:

Удачи!