Неможливо використовувати 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до шляху до класу?



Спробуйте це рішення, воно може вирішити вашу проблему. клацніть тут для рішення
Асад Абдін

Спробуйте це рішення, воно може вирішити вашу проблему. клацніть тут для рішення
Асад Абдін

Відповіді:


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 цим "обхідним шляхом"?
Каннан Еканат

3
Ви не можете додати згенеровану папку джерел, якщо вона знаходиться у стадії збірки, оскільки IDEA виключає папку збірки.
NBW

1
@NBW ви не можете вручну, так. Але якщо ви видалите свій модуль, а потім повторно імпортуєте його (з налаштованим цим плагіном), idea розпізнає все правильно.
Золтан,

3
Ви також можете клацнути правою кнопкою миші будь-яку папку та використовувати "позначити каталог як"
Пітер Де Бі

5
Хоча мій pom.xml містив цей фрагмент, IDEA не бачив згенерованих джерел. Запуск mvn idea:ideaвирішив проблему в моєму випадку. Для записів.
mmdemirbas

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"
        }
    }
}

Це працювало для мене як для імпорту проектів IntelliJ, так і для gradle idea. Дякую! :)
Кріс Купер,

Так - найкраща підказка доступна. Джордж злився!
Hoobajoob

Працює для мене. Я використовував це рішення зі сценаріями mapstruct, springframework та componentModel = "spring"
dwilda

16

Виправлення

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

Саме з цієї причини ми можемо встановити префікс Package у вихідних папках.


Різні , але пов'язана з цим проблема тут


1
Це виправлення - єдине, що працювало у мене за ДНІ пошуку. Дякую!
user1660256

О, дякую, я щойно оновив intellij, і вони змінили свої значки. Я не думав, що помаранчева папка означатиме, що це не джерело.
Пітер Де Бі

півдня я шукав це. Працював у мене з antlr4. Дякую!
Piotr Tempes

1
Для ANTLR> = 4.5.3 (можливо, і раніше), поки моя граматика знаходилася в src/main/antlr4/<path-to-package>/, тоді вона з'являлася б у target/generated-sources/antlr4/<path-to-package>. IntelliJ автоматично позначив правильний каталог як кореневий код джерела, і префікс пакета не потрібен. Я підозрюю, що це виправлення потрібно, коли люди розміщують свої граматики безпосередньо src/main/antlr4, що часто рекомендується з якихось причин.
Алекс

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 (це додано як каталог джерел явно в розділі "ресурс"). Чи є інший спосіб запобігти першому, що не відбулося. Якщо ні, тоді я спробую ваш обхідний шлях.
Каннан Еканат

1
Так, автор повинен мати користь target/generated-sources/my-tool.
Властиміл Овчачик


1

У мене була така сама проблема з Eclipse кілька місяців тому під час імпорту мого проекту. Тепер у мене було те саме з intelliJ. Ось як хтось допоміг мені вирішити це в IntelliJ:

Меню => Перегляд => Інструменти вікон => Проект Maven У значенні spring_user => Запустити конфігурацію, виберіть чисту інсталяцію. Це має зробити чисту установку, і після цього ви зможете побачити класи введіть тут опис зображення


1

Вирішено це, видаливши "Виключено" в налаштуваннях модуля (клацніть правою кнопкою миші на проекті, "Відкрити налаштування модуля"). введіть тут опис зображення


0

Єдиною робочою умовою після декількох спроб було видалити приховану папку .idea з кореневої папки проекту та повторно імпортувати її з Intellij


0

Я хотів оновити коментар, зроблений раніше DaShaun , але оскільки я коментую вперше, програма не дозволила.

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

Я клацнув правою кнопкою миші проект_назви -> maven -> оновити проект та оновив проект, який додав цільову / згенеровану джерела як вихідну папку до мого проекту 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.