Неможливо використовувати 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.