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.