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?



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>

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.


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

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


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.


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

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


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


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


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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.