Ошибка компиляции Maven2 и Groovy, но не в Eclipse - PullRequest
0 голосов
/ 11 февраля 2011

Он,

У меня смешанный проект затмения Java / Groovy.

Внутри затмения с использованием плагина groovy все компилируется просто отлично.Кроме того, я настроил свой проект для использования Maven2.И все же все прекрасно компилируется и запускается (тестируется) в eclipse.

Однако компиляция проекта вне Eclipse, то есть с использованием автономного Maven2, дает мне ошибки компилятора!Проект разделен на несколько подпроектов (родитель / модуль).Конфигурация Maven2, кажется, в порядке, потому что некоторые модули компилируются, но на самом деле один вызывает ошибку компиляции, например:

[ERROR] \Projects\X\rules\src\main\groovy\x\Normalizer.java:[18,25] normalize(java.util.List<java.util.Map<java.lang.String,java.lang.Object>>) in x.
x.util.RuleUtil cannot be applied to (java.util.List<java.util.Map<java.lang.String,?>>)

[ERROR] \Projects\X\rules\src\main\groovy\x\Statistics.java:[70,67] inconvertible types
found   : capture#683 of ?
required: java.lang.String

Почему этот код компилируется в eclipse, но не использует автономный Maven2?

Заранее спасибо, / нм

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Проблема, с которой вы сталкиваетесь, является проблемой генерации заглушки.GMaven создает заглушки Java для ваших файлов Groovy для компиляции с оставшимися файлами Java.Если ваше приложение полностью в Groovy, или нет ссылок из классов Java на классы Groovy, вы можете удалить цель <goal>generateStubs</goal>.

Компилятору Groovy-Eclipse не требуются заглушки, поэтому вы не видитеэта проблема внутри Eclipse.

Если вам требуется перекрестная ссылка между Groovy и Java, я бы рекомендовал использовать плагин groovy-eclipse-compiler для maven.Более подробная информация здесь:

http://contraptionsforprogramming.blogspot.com/2010/09/where-are-all-my-stubs.html

При этом вы будете уверены, что ваша компиляция внутри Eclipse и снаружи работает точно так же.

1 голос
/ 11 февраля 2011

Плагин Groovy Eclipse использует версию Groovy, представленную в папке плагинов Eclipse (groovy-1.7.5).Скорее всего, версия Groovy, на которую есть ссылка в вашем файле maven, отличается.Вы можете указать это мысль в gmaven-runtime:

      <plugin>
        <groupId>org.codehaus.gmaven</groupId>
        <artifactId>gmaven-plugin</artifactId>
        <version>1.3</version>
        <configuration>
          <providerSelection>1.7</providerSelection>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.gmaven.runtime</groupId>
            <artifactId>gmaven-runtime-1.7</artifactId>
            <version>1.3</version>
            <exclusions>
              <exclusion>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.7.5</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <goals>
              <goal>generateStubs</goal>
              <goal>compile</goal>
              <!-- <goal>generateTestStubs</goal> -->
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
...