Nie można użyć Intellij z wygenerowanym folderem źródeł

87

Pytanie pokrewne Jak skonfigurować IntelliJ IDEA i / lub Maven, aby automatycznie dodawał katalogi z kodem źródłowym Java wygenerowanym przy użyciu wtyczki jaxb2-maven?

Mam niestandardową wtyczkę, która generuje źródła pod target/generated-sources(Uwaga: tutaj nie ma nazwy narzędzia). Więc otrzymuję źródła takie jak target/generated-sources/com/mycompany... itd.

Tego formatu nie można w ogóle zmienić, więc będę mógł skonfigurować Intellij tak, aby dodał go jako folder źródłowy. Na razie widzę, że Intellij dodał target/generated-sources/comjako folder źródłowy.

Pamiętaj, że nie mam możliwości konfiguracji wtyczki!

UPDATE 1 : Nie zgadzam się z faktem, że MUSZĘ umieścić moje wygenerowane źródła w folderze nazw narzędzi. Może to dobra konwencja, ale jeśli mam tylko jeden generator, to nie ma potrzeby, żebym go tam umieszczał? Znowu w moim pom.xml mam resourcessekcję, która jasno wskazuje, że target/generated-sourcespowinien być traktowany jako folder źródłowy. Działa to doskonale w Eclipse, więc nie mam pojęcia, dlaczego Intellij nie przestrzegałby moich ustawień.

TL; DR -> Kiedy umieszczam target/generated-sourcesw sekcji zasobów, pom.xmldlaczego Intellij nadgorliwie dodaje target/generated-sources/comdo ścieżki klas?

Kannan Ekanath
źródło
Wypróbuj to rozwiązanie, może ono rozwiązać problem. kliknij tutaj, aby uzyskać rozwiązanie
Asad Abdin
Wypróbuj to rozwiązanie, może ono rozwiązać problem. kliknij tutaj, aby uzyskać rozwiązanie
Asad Abdin

Odpowiedzi:

139

Możesz po prostu zmienić strukturę projektu, aby dodać ten folder jako katalog „źródłowy”.

Struktura projektu → Moduły → Kliknij generated-sourcesfolder i utwórz z niego sourcesfolder.

Lub:

<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>
DaShaun
źródło
4
Ta opcja brzmi interesująco. Straciłbym to ustawienie za każdym razem, gdy uruchamiam „mvn idea: idea”. Czy istnieje sposób na zadeklarowanie wtyczki pomysłu maven z tym „obejściem”?
Kannan Ekanath
3
Nie możesz dodać wygenerowanego folderu źródeł, jeśli jest on w trakcie kompilacji, ponieważ IDEA wyklucza folder kompilacji.
NBW
1
@NBW nie możesz ręcznie, tak. Ale jeśli usuniesz swój moduł, a następnie ponownie zaimportujesz go (po skonfigurowaniu tej wtyczki), idea rozpozna wszystko poprawnie.
Zoltán
3
Możesz także kliknąć prawym przyciskiem dowolny folder i użyć opcji „oznacz katalog jako”
Pieter De Bie
5
Chociaż mój pom.xml zawierał ten fragment, IDEA nie widział wygenerowanych źródeł. Uruchomienie mvn idea:idearozwiązało problem w moim przypadku. Do akt.
mmdemirbas
77

Używam rozwiązania Maven (aplikacja SpringBoot):

  1. Kliknij prawym przyciskiem folder projektu
  2. Wybierz Maven
  3. Wybierz opcję Generuj źródła i aktualizuj foldery

Następnie Intellij automatycznie importuje wygenerowane źródła do projektu.

Mehmet Hanoğlu
źródło
Działa bez naruszania struktury folderów!
szab.kel
Ta odpowiedź zasługuje na wyższą - znacznie wygodniejszą niż przyjęta odpowiedź
stusrob
5
Zwróć uwagę, że w najnowszej wersji Intellij 2019.1 możesz kliknąć drugi przycisk w menu maven (po prawej stronie rozwiń pasek boczny maven, u góry drugi przycisk)
Roeland Van Heddegem
Musiałem również sprawdzić moje ustawienia maven.xml, które wskazywały na niewłaściwe, a nie domyślne repozytorium
Jonathan
22

W przypadku gradle ustawienia projektu zostaną wyczyszczone po każdym odświeżeniu ustawień gradle. Zamiast tego musisz dodać następujące linie (lub podobne) w pliku build.gradle, używam kotlin, więc:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
zhywu
źródło
Działało to dla mnie zarówno w przypadku importu projektu IntelliJ, jak i gradle idea. Dzięki! :)
Chris Cooper
Tak - najlepsza dostępna wskazówka. George się wściekł!
Hoobajoob
Dla mnie działa. Że stosuje się ten roztwór mapstruct, Spring Framework i componentModel = "sprężyny" scenariusz
dwilda
16

Poprawka

Przejdź do Struktura projektu - Moduły - Foldery źródłowe i znajdź target/generated-sources/antlr4/com/mycompany- kliknij Edytuj właściwości i ustaw prefiks pakietu na com.mycompany.

To jest dokładnie powód, dla którego możemy ustawić prefiks pakietu w katalogach źródłowych.


Różne, ale związany z tym problem tutaj

Vlastimil Ovčáčík
źródło
1
Ta poprawka jest jedyną, która działała dla mnie przez DNI szukania. Dzięki!
user1660256
Och, dzięki, właśnie zaktualizowałem Intellij i zmienili swoje ikony. Nie sądziłem, że pomarańczowy folder oznacza, że ​​nie jest to źródło.
Pieter De Bie
pół dnia tego szukałem. Pracował dla mnie z antlr4. Dzięki!
Piotr Tempes
1
Dla ANTLR> = 4.5.3 (może też wcześniej), o ile moja gramatyka znajdowała się w src/main/antlr4/<path-to-package>/, wtedy pojawiłaby się w target/generated-sources/antlr4/<path-to-package>. IntelliJ automatycznie oznaczył poprawny katalog jako katalog źródłowy i nie był wymagany żaden prefiks pakietu. Podejrzewam, że ta poprawka jest potrzebna, gdy ludzie umieszczają swoje gramatyki bezpośrednio src/main/antlr4, co jest często zalecane z jakiegoś powodu.
Alex Reinking
5

Ktokolwiek napisał tę wtyczkę, bardzo schrzanił. To nie jest sposób na zrobienie tego!

Każde obejście byłoby wielkim hackem, poinformuj twórcę wtyczki o jego błędzie.

Przepraszam, to jedyna rzecz do zrobienia.


OK, oto hack, bezpośrednio po wykonaniu wtyczki użyj wtyczki antrun, aby przenieść katalog w inne miejsce:

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

W tym przykładzie toolnamenależy zastąpić wszystko, co jednoznacznie identyfikuje wtyczkę, która utworzyła kod i comoznacza katalog główny utworzonych pakietów. Jeśli masz wiele katalogów głównych pakietów, prawdopodobnie potrzebujesz wielu <move>zadań.

Ale jeśli wtyczka doda folder jako folder źródłowy, masz przerąbane.

Sean Patrick Floyd
źródło
Dzięki Sean. Zauważyłem, że Intellij dodaje zarówno docelowe / wygenerowane-źródła / com, jak i docelowe / wygenerowane-źródła (jest to dodawane jako katalog źródłowy jawnie w sekcji „zasoby”). Czy jest jakiś inny sposób, aby zapobiec wystąpieniu pierwszej rzeczy? Jeśli nie, spróbuję obejść.
Kannan Ekanath
1
Tak, autor powinien był użyć target/generated-sources/my-tool.
Vlastimil Ovčáčík
1

Może możesz dodać krok do fazy generowania źródeł, która przenosi folder?

Christoffer Hammarström
źródło
1

Miałem ten sam problem z Eclipse kilka miesięcy temu podczas importowania mojego projektu. Teraz miałem to samo z intelliJ. Oto jak ktoś pomógł mi rozwiązać ten problem w IntelliJ:

Menu => Widok => Narzędzia windows => Projekt Maven W spring_user value => Uruchom konfigurację, wybierz czystą instalację. Powinno to zrobić czystą instalację, a po tym powinieneś być w stanie zobaczyć klasy wprowadź opis obrazu tutaj

Elizabeth M.
źródło
1

Rozwiązany przez usunięcie „Wykluczone” w ustawieniach modułu (kliknij prawym przyciskiem myszy projekt, „Otwórz ustawienia modułu”). wprowadź opis obrazu tutaj

JP
źródło
0

Jedynym działającym warunkiem, po kilku próbach, było usunięcie ukrytego folderu .idea z głównego folderu projektu i ponowne zaimportowanie go z Intellij

Jonathan
źródło
0

Chciałem zaktualizować w komentarzu wcześniej złożonym przez DaShaun , ale ponieważ jest to mój pierwszy komentarz, aplikacja mi nie pozwoliła.

Niemniej jednak używam eclipse i po dodaniu poniższego fragmentu kodu do mojego pom.xml zgodnie z sugestią Dashun i uruchomiłem czysty pakiet mvn, aby wygenerować pliki źródłowe avro, ale nadal otrzymywałem błąd kompilacji w obszarze roboczym.

Kliknąłem prawym przyciskiem myszy project_name -> maven -> aktualizuj projekt i zaktualizowałem projekt, który dodał docelowe / wygenerowane-źródła jako folder źródłowy do mojego projektu 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>
anupam
źródło