2012-11-20 4 views
1

Использование плагина delombok maven помещает все мои файлы в 'target/generated-sources/delombok'. Когда я пытаюсь запустить maven-компилятор, он жалуется на дублирующие классы, поэтому я устанавливаю addOutputDirectory равным this question recommends. Проблема в том, что файлы delombok'ed игнорируются, поэтому компилятор жалуется на отсутствующие методы.Как я могу получить Maven для компиляции из измененного кода (delombok'd), а не из src/main/java

Как я могу сообщить плагину maven компилятора игнорировать каталог «src/main/java» по умолчанию, а вместо этого использовать компиляцию с целевым/сгенерированным источником/delombok?

Запуск MVN компилировать -X производит следующий вывод, когда компилятор работает:

[DEBUG] (f) compileSourceRoots = [C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java, C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java] 
[DEBUG] (f) compilerId = javac 
[DEBUG] (f) debug = true 
[DEBUG] (f) encoding = UTF-8 
[DEBUG] (f) failOnError = true 
[DEBUG] (f) forceJavacCompilerUse = false 
[DEBUG] (f) fork = false 
[DEBUG] (f) generatedSourcesDirectory = C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\annotations 
[DEBUG] (f) mojoExecution = org.apache.maven.plugins:maven-compiler-plugin:3.0:compile {execution: default-compile} 
[DEBUG] (f) optimize = false 
[DEBUG] (f) outputDirectory = C:\Users\Jamey.Holden\workspace\Apollo\Website\target\classes 
[DEBUG] (f) proc = none 
[DEBUG] (f) projectArtifact = ic.apollo:website:war:0.1 
[DEBUG] (f) showDeprecation = false 
[DEBUG] (f) showWarnings = false 
[DEBUG] (f) skipMultiThreadWarning = false 
[DEBUG] (f) source = 1.6 
[DEBUG] (f) staleMillis = 0 
[DEBUG] (f) target = 1.6 
[DEBUG] (f) verbose = false 
[DEBUG] (f) mavenSession = [email protected] 
[DEBUG] (f) session = [email protected] 

Затем дальше вниз, где параметры командной строки печатаются я могу видеть, что -sourcepath аргумент: -sourcepath C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java;C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java; Ни один из них не каталог delombok, поэтому достаточно справедливо, что он не может найти все геттеры и сеттеры, когда он пытается скомпилировать.

ОБНОВЛЕНИЕ Я думаю, что я дошел до сути проблемы. Я устанавливал proc = none, чтобы предотвратить обработку аннотаций, потому что я использую queryDSL для генерации мета-сущностей, и когда это не было сделано, чтобы избежать обработки аннотаций, у компилятора была обнаружена ошибка с повторяющимися объектами. Удаление proc = none и обработчик аннотации querydsl решил проблему. Теперь я просто хочу снова запустить m2e.

ответ

5

Похоже, вы не читали documentation, потому что плагин должен быть настроен правильно, как это, это фаза жизненного цикла генерирующих источников, а затем исходные файлы, которые были сгенерированы, автоматически будут подхвачены maven -compiler-плагин.

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.projectlombok</groupId> 
     <artifactId>lombok-maven-plugin</artifactId> 
     <version>0.11.6.0</version> 
     <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>delombok</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
+0

Я принимая это, потому что это привело для меня решение моей проблемы было то, что я установил proc = нет, спасибо! – Jamey

+0

Для людей из будущего, которые столкнутся с ошибкой с кодировкой, мне пришлось добавить свойство (свойство tag) ' UTF-8' to 'pom.xml'. – Jezor

0

ли что-то похожее на

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.0</version> 
     <configuration> 
     <includes> 
      <include>target/generated-sources/delombok/*.java</include> 
     </includes> 
     <excludes> 
      <exclude>src/main/java</exclude> 
     </excludes>   
     </configuration> 
    </plugin> 
2

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

Чтобы создать компилятор без Ломбок вам нужно установить прок никому:

 <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven-compiler-plugin.version}</version> 
      <configuration> 
            <proc>none</proc> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
      </configuration> 
     </plugin> 
    </plugins> 

И с Ломбок вы должны явно установить процессор аннотаций:

 <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven-compiler-plugin.version}</version> 
      <configuration> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
       <annotationProcessors> 
        <annotationProcessor>lombok.core.AnnotationProcessor</annotationProcessor> 
       </annotationProcessors> 
      </configuration> 
     </plugin> 
    </plugins> 
+0

Почему, когда я использовал этот '/ lombok.core.AnnotationProcessor, сгенерированный источник не отображается в моем проекте? – zygimantus