Impossibile utilizzare Intellij con una cartella delle origini generata


87

Domanda correlata Come configurare IntelliJ IDEA e / o Maven per aggiungere automaticamente directory con codice sorgente Java generato utilizzando jaxb2-maven-plugin?

Ho un plugin personalizzato che genera sorgenti sotto target/generated-sources(Nota nessun nome strumento qui). Quindi ottengo fonti come target/generated-sources/com/mycompany... ecc.

Questo formato non può essere modificato affatto, quindi sarò in grado di configurare Intellij per aggiungerlo come cartella di origine. A partire da ora, posso vedere che Intellij ha aggiunto target/generated-sources/comcome cartella di origine.

Tieni presente che non ho la possibilità di configurare il plugin!

AGGIORNAMENTO 1 : Non sono d'accordo con il fatto che DEVO mettere le mie fonti generate sotto una cartella del nome dello strumento. Potrebbe essere una buona convenzione, ma se ho un solo generatore non è necessario che lo metta lì? Di nuovo, nel mio pom.xml ho una resourcessezione che indica chiaramente che target/generated-sourcesdovrebbe essere trattata come una cartella di origine. Funziona perfettamente in Eclipse, quindi non ho idea del motivo per cui Intellij non rispetterebbe le mie impostazioni.

TL; DR -> Quando inserisco target/generated-sourcesla sezione delle risorse di pom.xmlperché Intellij è troppo zelante da aggiungere target/generated-sources/comal classpath?



Prova questa soluzione, potrebbe risolvere il tuo problema. clicca qui per la soluzione
Asad Abdin

Prova questa soluzione, potrebbe risolvere il tuo problema. clicca qui per la soluzione
Asad Abdin

Risposte:


141

Puoi semplicemente modificare la struttura del progetto per aggiungere quella cartella come directory "sorgente".

Struttura del progetto → Moduli → Fare clic sulla generated-sourcescartella e renderla una sourcescartella.

O:

<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
Questa opzione sembra interessante. Perderei questa impostazione ogni volta che eseguo "mvn idea: idea". C'è un modo per dichiarare un plug-in di idea esperto con questa "soluzione alternativa"?
Kannan Ekanath

3
Non è possibile aggiungere la cartella delle origini generate se è in fase di compilazione perché IDEA esclude la cartella di compilazione.
NBW

1
@ NBW non puoi manualmente, sì. Ma se elimini il tuo modulo e poi lo reimporti, (con questo plugin impostato), l'idea riconosce tutto correttamente.
Zoltán

3
Puoi anche fare clic con il pulsante destro del mouse su qualsiasi cartella e utilizzare "contrassegna directory come"
Pieter De Bie

5
Sebbene il mio pom.xml contenga questo frammento, IDEA non ha visto le sorgenti generate. La corsa ha mvn idea:idearisolto il problema nel mio caso. Per i record.
mmdemirbas

83

Sto usando la soluzione Maven (applicazione SpringBoot):

  1. Fare clic con il tasto destro sulla cartella del progetto
  2. Seleziona Maven
  3. Seleziona Genera origini e aggiorna cartelle

Quindi, Intellij importa automaticamente le sorgenti generate nel progetto.


Funziona senza rovinare la struttura delle cartelle da solo!
szab.kel

Questa risposta merita di essere più alta - molto più conveniente della risposta accettata
stusrob

5
Si noti che nell'ultima versione di Intellij 2019.1, è possibile fare clic sul secondo pulsante nel menu Maven (a destra, espandere la barra laterale Maven, in alto, secondo pulsante)
Roeland Van Heddegem

Ho anche dovuto controllare il mio Maven settings.xml che puntava al repository sbagliato non predefinito
Jonathan

Funziona come un fascino!
marcin.programuje

22

Con gradle, le impostazioni del progetto verranno cancellate ogni volta che aggiorni le impostazioni di gradle. Invece devi aggiungere le seguenti righe (o simili) nel tuo build.gradle, sto usando kotlin quindi:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}

Questo ha funzionato per me sia per l'importazione del progetto di IntelliJ che per gradle idea. Grazie! :)
Chris Cooper

Sì, miglior suggerimento disponibile. George si stava arrabbiando!
Hoobajoob

Per me funziona. Ho usato questa soluzione con mapstruct, springframework e componentModel = "spring" scenario
dwilda

16

La correzione

Vai a Struttura progetto - Moduli - Cartelle di origine e trova il target/generated-sources/antlr4/com/mycompany- fai clic su Modifica proprietà e imposta Prefisso pacchetto su com.mycompany.

Questo è esattamente il motivo per cui possiamo impostare il prefisso del pacchetto nelle directory di origine.


Problema diverso ma correlato qui


1
Questa correzione è l'unica che ha funzionato per me in DAYS of looking. Grazie!
CNDyson

Oh grazie, ho appena aggiornato intellij e hanno cambiato le loro icone. Non pensavo che la cartella arancione significasse che non è una fonte.
Pieter De Bie

Mezza giornata lo stavo cercando. Ha funzionato per me con antlr4. Grazie!
Piotr Tempes

1
Per ANTLR> = 4.5.3 (forse anche prima), fintanto che la mia grammatica si trovava in src/main/antlr4/<path-to-package>/, allora appariva in target/generated-sources/antlr4/<path-to-package>. IntelliJ ha contrassegnato automaticamente la directory corretta come root di origine e non è stato necessario alcun prefisso del pacchetto. Sospetto che questa correzione sia necessaria quando le persone inseriscono direttamente le loro grammatiche src/main/antlr4, il che è spesso consigliato per qualche motivo.
Alex Reinking

5

Chiunque abbia scritto quel plugin ha sbagliato alla grande. Non è questo il modo per farlo!

Qualsiasi soluzione alternativa sarebbe un enorme trucco, rendere lo sviluppatore del plugin consapevole del suo bug.

Scusa, è l'unica cosa da fare.


OK, ecco un trucco, subito dopo l'esecuzione del tuo plugin, usa il plugin antrun per spostare la directory da qualche altra parte:

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

In questo esempio, toolnamedovrebbe essere sostituito da tutto ciò che identifica in modo univoco il plug-in che ha creato il codice e comrappresenta la radice dei pacchetti creati. Se hai più root di pacchetto, probabilmente avrai bisogno di più <move>attività.

Ma se il plug-in aggiunge la cartella come cartella di origine, sei fregato.


Grazie Sean. In realtà ho osservato che Intellij aggiunge sia target / generated-sources / com sia target / generated-sources (questo viene aggiunto esplicitamente come directory di origine nella sezione "risorsa"). C'è un altro modo per evitare che la prima cosa accada. Se no, proverò la tua soluzione alternativa.
Kannan Ekanath

1
Sì, l'autore dovrebbe averne l'uso target/generated-sources/my-tool.
Vlastimil Ovčáčík


1

Ho avuto lo stesso problema con Eclipse un paio di mesi fa durante l'importazione del mio progetto. Ora ho avuto lo stesso con intelliJ. Ecco come qualcuno mi ha aiutato a risolvere questo problema in IntelliJ:

Menu => Visualizza => Strumenti windows => Progetto Maven Nel valore spring_user => Esegui configurazione, scegli installazione pulita. Questo dovrebbe eseguire un'installazione pulita e dopo questo dovresti essere in grado di vedere le classi inserisci qui la descrizione dell'immagine


1

Risolto rimuovendo "Escluso" nelle impostazioni del modulo (clic destro sul progetto, "Apri impostazioni modulo"). inserisci qui la descrizione dell'immagine


0

L'unica condizione di lavoro, dopo diversi tentativi, era rimuovere la cartella .idea nascosta dalla cartella principale del progetto e reimportarla da Intellij


0

Volevo aggiornare al commento fatto in precedenza da DaShaun , ma poiché è la mia prima volta che commento, l'applicazione non me lo ha permesso.

Tuttavia, sto usando eclipse e dopo aver aggiunto lo snippet di codice di cui sotto al mio pom.xml come suggerito da Dashun e ho eseguito il pacchetto mvn clean per generare i file sorgente avro, ma stavo ancora ricevendo un errore di compilazione nell'area di lavoro.

Ho fatto clic con il pulsante destro del mouse su nome_progetto -> maven -> aggiorna progetto e aggiornato il progetto, che ha aggiunto la destinazione / sorgenti generate come cartella sorgente al mio progetto 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>

0

Ho eseguito mvn generate-resources e poi ho contrassegnato la cartella / target / generated-resources come "sorgenti" (Struttura del progetto -> Impostazioni progetto -> Moduli -> Seleziona / target / generate-resources -> Fare clic sull'icona blu "Sorgenti".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.