Невозможно использовать Intellij со сгенерированной папкой источников

87

Связанный вопрос Как настроить IntelliJ IDEA и / или Maven для автоматического добавления каталогов с исходным кодом Java, созданным с помощью jaxb2-maven-plugin?

У меня есть настраиваемый плагин, который генерирует источники target/generated-sources(здесь не указывайте имя инструмента). Так что я получаю такие источники, как target/generated-sources/com/mycompany...

Этот формат вообще нельзя изменить, поэтому я смогу настроить Intellij на добавление его в качестве исходной папки. На данный момент я вижу, что Intellij добавлен target/generated-sources/comв качестве исходной папки.

Обратите внимание, что у меня нет возможности настроить плагин!

ОБНОВЛЕНИЕ 1 : Я не согласен с тем фактом, что я ДОЛЖЕН помещать свои сгенерированные источники в папку с именами инструментов. Это может быть хорошее соглашение, но если у меня есть только один генератор, мне не нужно его туда помещать? Опять же, в моем pom.xml у меня есть resourcesраздел, в котором четко указано, что его target/generated-sourcesследует рассматривать как исходную папку. Это отлично работает в Eclipse, поэтому я понятия не имею, почему Intellij не уважает мои настройки.

TL; DR -> Когда я добавляю в target/generated-sourcesраздел ресурсов, pom.xmlпочему Intellij слишком рьяно добавляет target/generated-sources/comв путь к классам?

Каннан Эканатх
источник
1
Взгляните на stackoverflow.com/questions/10735380/…
Вадзим
Попробуйте это решение, оно может решить вашу проблему. щелкните здесь, чтобы
Асад Абдин
Попробуйте это решение, оно может решить вашу проблему. нажмите здесь, чтобы
Асад Абдин

Ответы:

139

Вы можете просто изменить структуру проекта, чтобы добавить эту папку в качестве «исходного» каталога.

Структура проекта → Модули → Щелкните generated-sourcesпапку и сделайте ее sourcesпапкой.

Или:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
ДаШаун
источник
4
Этот вариант звучит интересно. Я терял этот параметр каждый раз, когда запускал «mvn idea: idea». Есть ли способ объявить плагин maven idea с помощью этого «обходного пути»?
Каннан Эканат, 02
3
Вы не можете добавить созданную папку источников, если она находится в процессе сборки, потому что IDEA исключает папку сборки.
NBW
1
@NBW нельзя вручную, да. Но если вы удалите свой модуль, а затем повторно импортируете его (с установленным плагином), idea все распознает правильно.
Золтан
3
Вы также можете щелкнуть правой кнопкой мыши любую папку и использовать «Отметить каталог как»
Питер Де Би
5
Хотя мой pom.xml содержал этот фрагмент, IDEA не видела сгенерированные источники. mvn idea:ideaВ моем случае бег решил проблему. Для записей.
mmdemirbas 06
77

Я использую решение Maven (приложение SpringBoot):

  1. Щелкните правой кнопкой мыши папку проекта
  2. Выберите Maven
  3. Выберите « Создать источники и обновить папки».

Затем Intellij автоматически импортирует сгенерированные источники в проект.

Мехмет Ханоглу
источник
Работает без нарушения структуры папок самостоятельно!
szab.kel
Этот ответ заслуживает того, чтобы быть выше - намного удобнее, чем принятый ответ
stusrob
5
Обратите внимание, что в последней версии Intellij 2019.1 вы можете нажать вторую кнопку в меню maven (справа разверните боковую панель maven, вверху, вторая кнопка)
Roeland Van Heddegem
Мне также пришлось проверить мой maven settings.xml, который указывал на неправильное репо по умолчанию
Джонатан
22

С помощью Gradle настройки проекта будут очищаться всякий раз, когда вы обновляете настройки Gradle. Вместо этого вам нужно добавить следующие строки (или аналогичные) в свой build.gradle, я использую kotlin, поэтому:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
Zhywu
источник
Это сработало для меня как для импорта проекта IntelliJ, так и для gradle idea. Благодарность! :)
Крис Купер
Да, лучший совет. Джордж злился!
Hoobajoob
У меня работает. Я использовал это решение со сценариями mapstruct, springframework и componentModel = "spring"
dwilda
16

Исправление

Перейдите в Структура проекта - Модули - Исходные папки и найдите target/generated-sources/antlr4/com/mycompany- щелкните Изменить свойства и установите для префикса пакета значение com.mycompany.

Именно по этой причине мы можем установить префикс пакета для исходных каталогов.


Другая, но связанная проблема здесь

Властимил Овчачик
источник
1
Это единственное исправление, которое у меня сработало за ДНИ поисков. Благодарность!
user1660256
О, спасибо, я только что обновил intellij, и они изменили свои значки. Не думал, что оранжевая папка будет означать, что это не источник.
Питер Де Би
полдня искал это. У меня работал с antlr4. Благодарность!
Петр Темпес
1
Для ANTLR> = 4.5.3 (может быть, и раньше), если моя грамматика находится в src/main/antlr4/<path-to-package>/, то она будет отображаться в target/generated-sources/antlr4/<path-to-package>. IntelliJ автоматически пометил правильный каталог в качестве корневого источника, и префикс пакета не требовался. Я подозреваю, что это исправление необходимо, когда люди помещают свои грамматики напрямую src/main/antlr4, что по какой-то причине часто рекомендуется.
Alex Reinking
5

Тот, кто написал этот плагин, сильно облажался. Это не способ сделать это!

Любой обходной путь был бы огромным взломом, заставившим разработчика плагина узнать о его ошибке.

Извините, это единственное, что нужно сделать.


Хорошо, вот хак, сразу после запуска вашего плагина используйте плагин antrun, чтобы переместить каталог в другое место:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
      <execution>
        <phase>process-sources</phase>
        <configuration>
          <target>
            <move todir="${project.build.directory}/generated-sources/toolname/com"
                  overwrite="true">
                <fileset dir="${project.build.directory}/generated-sources/com"/>
            </move>
          </target>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
</plugin>

В этом примере toolnameследует заменить на все, что однозначно идентифицирует плагин, создавший код, и comобозначает корень созданных пакетов. Если у вас несколько корневых пакетов, вам, вероятно, понадобится несколько <move>задач.

Но если плагин добавляет папку в качестве исходной папки, то вы облажались.

Шон Патрик Флойд
источник
Спасибо, Шон. Я действительно заметил, что Intellij добавляет как target / generated-sources / com, так и target / generated-sources (это явно добавлено как исходный каталог в разделе «ресурс»). Есть ли другой способ предотвратить первое событие. Если нет, я попробую ваше решение.
Каннан Эканат 02
1
Да, автору надо было пользоваться target/generated-sources/my-tool.
Vlastimil Ovčáčík
1

Может быть, вы можете добавить шаг к этапу создания источников, который перемещает папку?

Кристоффер Хаммарстрём
источник
1

У меня была такая же проблема с Eclipse пару месяцев назад при импорте моего проекта. Теперь то же самое было и с intelliJ. Вот как кто-то помог мне решить эту проблему в IntelliJ:

Меню => Вид => Окна инструментов => Проект Maven. В значении spring_user => Выполнить конфигурацию выберите чистую установку. Это должно выполнить чистую установку, и после этого вы сможете увидеть классы введите описание изображения здесь

Элизабет М
источник
1

Решил, удалив «Исключено» в настройках модуля (щелкните правой кнопкой мыши проект, «Открыть настройки модуля»). введите описание изображения здесь

JP
источник
0

Единственным рабочим условием после нескольких попыток было удалить скрытую папку .idea из корневой папки проекта и повторно импортировать ее из Intellij.

Джонатан
источник
0

Я хотел обновить комментарий, ранее сделанный DaShaun , но, поскольку это мой первый комментарий, приложение не позволило мне.

Тем не менее, я использую eclipse, и после того, как я добавил упомянутый ниже фрагмент кода в свой pom.xml, как было предложено Dashun, я запустил пакет mvn clean для генерации исходных файлов avro, но я все еще получал ошибку компиляции в рабочей области.

Я щелкнул правой кнопкой мыши project_name -> maven -> update project и обновил проект, который добавил target / generated-sources в качестве исходной папки в мой проект eclipse.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
анупам
источник