Как игнорировать каталог Java Source во время компиляции Maven?

Я пытаюсь использоватьЛомбок Maven Плагин обеспечить правильное создание Javadocs при использованииЛомбок.

Lombok Maven представляет новую цель генерации кода непосредственно перед компиляцией. В моей конфигурации мойsourceDirectory (Java с аннотациями Lombok,src/main/java) обрабатывается для создания Java (без аннотаций Lombok) вtarget/generated-sources/delombok.

Тем не менее, каждый файл вsourceDirectory теперь имеет соответствующий (с тем же именем) файл вtarget/generated-sources/delombok, что приводит к сбоям компиляции из-за дублирования классов.

How can I tell the Java compiler to ignore the sources in sourceDirectory?

Обратите внимание, что в конфигурации Lombok Maven по умолчанию разработчик помещает Java (с аннотациями Lombok) вsrc/main/lombok папка вместоsrc/main/java, Однако я не хочу этого делать, потому что это сбивает с толку IDE, и мой код компилируется очень хорошо (если я удаляю плагин Maven).

Также обратите внимание, что просто переопределениеsourceDirectory также расстроит IDE (они больше не знают, где найти исходный код Java!).

Ответы на вопрос(4)

Решение Вопроса

Недавно я перешел от использования подхода flakey maven-exec-plugin для генерации необработанных источников для инструмента javadoc к использованию lombok-maven-plugin

Моя настройка

All sources in src/main/java Generated sources go in target/generated-sources/delombok

Сначала я столкнулся с этой проблемой, но, похоже, это легко исправить: не позволяйте lombok-maven-plugin добавлять путь delombok к исходным путям компилятора с помощьюaddOutputDirectoy, IE

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>0.11.2.0</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>delombok</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <addOutputDirectory>false</addOutputDirectory>
        <sourceDirectory>src/main/java</sourceDirectory>
    </configuration>
</plugin>

Это, кажется, решило проблему на данный момент

EDIT: Бонус, как создать правильный Javadoc с этой настройкой

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.8.1</version>
    <configuration>
        <defaultVersion>${project.version}</defaultVersion>
        <sourcepath>target/generated-sources/delombok</sourcepath>
    </configuration>
</plugin>
 17 авг. 2012 г., 19:30
@fommil Я просто обнаружил, что замена некоторыхgenerate-sources сprocess-sources
 13 авг. 2012 г., 11:48
@fommil Конечно, можно, см. редактирование. Только что сделал тест, и у меня это сработало
 13 авг. 2012 г., 12:58
@ fommil Не совсем. Я, честно говоря, просто подожду, 94 класса, которые интенсивно используют ломбок, занимают всего 5-10 секунд. 2 варианта, хотя я мог бы подумать: 1) запуститьmvn lombok:delombok всякий раз, когда вы запускаете Javadoc или 2) Bind topre-site вместо этого, хотя он не будет работать, если вы не сделаетеmvn site
 fommil13 авг. 2012 г., 12:31
отлично! Это, очевидно, замедляет типичные фазы компиляции / запуска, есть ли способ, которым он будет работать только при создании javadocs?
 fommil13 авг. 2012 г., 11:35
это хороший обходной путь! Но это не поможет с генерацией Javadoc, которая будет создана с использованиемsrc/main/java, У Lombok есть RFE, чтобы начать создавать гораздо больше Javadocs, так что это может стать требованием для будущего решения.

Создать новыйMaven профильи в новом профиле просто переопределите источники:

<sourceDirectory>target/generated-sources/delombok</sourceDirectory>

Alternatively

Build helper: there's a build helper which seems to provide this functionality, but I have not used this before. Hack: there's a hack described here, but the author recommends against it, and besides: if you're going to take the time to modify your POM and create this hack, you may as well do things The Right Way and implement a profile.
 fommil09 июл. 2012 г., 17:27
Argh ... оказывается, невозможно сбросить & lt; code & gt; sourceDirectory & lt; / code & gt; в профиле. Это один из кодов & lt; code & build & lt; / code & gt; элементы, которые не могут быть изменены.
 06 мар. 2018 г., 13:23
Можно установить исходный каталог в профиле, используя дополнительное свойство, которое установлено в профиле:stackoverflow.com/a/19142756/897024
 04 июл. 2012 г., 17:23
Хорошо, я обновил свой ответ хаком, который вы можете осуществить, но ни я, ни автор оригинала не порекомендовали бы его :)
 fommil04 июл. 2012 г., 16:33
подход с использованием профиля мог бы быть хорошим способом сделать это - таким образом профиль мог бы использоваться для сборки пакета и javadocs, тогда как профиль по умолчанию мог бы просто полностью игнорировать деломбокинг. Спасибо! Я оставлю это без ответа на некоторое время, чтобы посмотреть, придет ли кто-нибудь решение, для которого не требуется отдельный профиль для разработки и упаковки.

Казалось бы, нет хорошего способа настроить Lombok Maven. & Quot; профиль & quot; подход, предложенный @opyate, не работает из-за

http://jira.codehaus.org/browse/MNG-5310

Тем не менее, действительно уродливый способ обойти это просто иметь другойpom.xmlидентичны во всех отношениях, кромеsourceDirectory переопределенный, используя командную строку argum, позволяет использовать файл как в:

Maven альтернативный пом

 fommil10 нояб. 2013 г., 01:47
за это проголосовали? WTF?

delombok цель предназначена для преобразования Java-кода изsrc/main/lombok вtarget/generated-source/delombok, Затем другой код Java, найденный вsrc/main/java в сочетании сtarget/generated-source/delombok производить комбинированные классы Java.

It helps to think of delombok as a source code generator.

So how can you get what you really want?  (Обратите внимание, что Maven имеетaddCompileSourceRoot метод, но не соответствующийremoveCompileSourceRoot.) Представьте себе следующееhack:

Override the default <build><sourceDirectory> from src/main/java to be ${project.build.directory}/generated-sources/delombok. Override the default delombok sourceDirectory from src/main/lombok to be src/main/java, and disable addOutputDirectory.

В основном вы будете использоватьsrc/main/java, но Maven будет игнорировать его и вместо этого использоватьtarget/generated-sources/delombok, Плагин Lombok преобразуетsrc/main/java в разработанный код вtarget/generated-sources/delombok.

<build>
  <sourceDirectory>${project.build.directory}/generated-sources/delombok</sourceDirectory>
  <plugins>
    <plugin>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok-maven-plugin</artifactId>
      <version>1.16.6.1</version>
      <executions>
        <execution>
          <id>delombok</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>delombok</goal>
          </goals>
          <configuration>
            <addOutputDirectory>false</addOutputDirectory>
            <sourceDirectory>src/main/java</sourceDirectory>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Обратите внимание, что вам не нужно взламывать другие плагины, такие какmaven-jar-plugin или жеmaven-javadoc-pluginпотому что они должны уважатьsourceDirectory.

Use this hack at your own risk.  (Я предполагаю, что это может запутать вашу IDE и некоторых других разработчиков.)

 25 февр. 2016 г., 02:46
Спасибо, это работает для меня

Ваш ответ на вопрос