Intellij kann nicht mit einem generierten Quellordner verwendet werden

86

Verwandte Frage Wie konfiguriere ich IntelliJ IDEA und / oder Maven so, dass Verzeichnisse mit Java-Quellcode, die mit dem jaxb2-maven-Plugin generiert wurden, automatisch hinzugefügt werden?

Ich habe ein benutzerdefiniertes Plugin, das Quellen unter generiert target/generated-sources(beachten Sie hier keinen Werkzeugnamen). Also bekomme ich Quellen wie target/generated-sources/com/mycompany... etc.

Dieses Format kann überhaupt nicht geändert werden. Daher kann ich Intellij so konfigurieren, dass es als Quellordner hinzugefügt wird. Ab sofort kann ich sehen, dass Intellij target/generated-sources/comals Quellordner hinzugefügt hat .

Bitte beachten Sie, dass ich das Plugin nicht konfigurieren kann!

UPDATE 1 : Ich bin nicht damit einverstanden, dass ich meine generierten Quellen unter einem Werkzeugnamenordner ablegen muss. Es mag eine gute Konvention sein, aber wenn ich nur einen Generator habe, muss ich ihn nicht dort platzieren? Wieder habe ich in meiner pom.xml einen resourcesAbschnitt, der klar angibt, dass target/generated-sourcesdies als Quellordner behandelt werden soll. Dies funktioniert in Eclipse einwandfrei, daher habe ich keine Ahnung, warum Intellij meine Einstellungen nicht respektieren würde.

TL; DR -> Wenn ich target/generated-sourcesin den Ressourcenbereich pom.xmleingebe, warum ist Intellij übereifrig target/generated-sources/com, dem Klassenpfad etwas hinzuzufügen ?

Kannan Ekanath
quelle
1
Werfen
Vadzim
Probieren Sie diese Lösung aus, um Ihr Problem zu beheben. Klicken Sie hier für die Lösung
Asad Abdin
Probieren Sie diese Lösung aus, um Ihr Problem zu beheben. Klicken Sie hier für die Lösung
Asad Abdin

Antworten:

138

Sie können einfach die Projektstruktur ändern, um diesen Ordner als "Quell" -Verzeichnis hinzuzufügen.

Projektstruktur → Module → Klicken Sie auf den generated-sourcesOrdner und machen Sie ihn zu einem sourcesOrdner.

Oder:

<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
quelle
4
Diese Option klingt interessant. Ich würde diese Einstellung jedes Mal verlieren, wenn ich "mvn idea: idea" ausführe. Gibt es eine Möglichkeit, ein Maven-Ideen-Plugin mit dieser "Problemumgehung" zu deklarieren?
Kannan Ekanath
3
Sie können den generierten Quellordner nicht hinzufügen, wenn er sich unter Build befindet, da IDEA den Build-Ordner ausschließt.
NBW
1
@NBW können Sie nicht manuell, ja. Wenn Sie jedoch Ihr Modul löschen und es dann erneut importieren (mit diesem Plugin), erkennt die Idee alles korrekt.
Zoltán
3
Sie können auch mit der rechten Maustaste auf einen beliebigen Ordner klicken und "Verzeichnis markieren als" verwenden
Pieter De Bie
5
Obwohl meine pom.xml dieses Snippet enthielt, hat IDEA die generierten Quellen nicht gesehen. Laufen hat mvn idea:ideadas Problem in meinem Fall gelöst. Für Aufzeichnungen.
mmdemirbas
76

Ich verwende Maven (SpringBoot-Anwendung) Lösung ist:

  1. Klicken Sie mit der rechten Maustaste auf den Projektordner
  2. Wählen Sie Maven
  3. Wählen Sie Quellen generieren und Ordner aktualisieren

Anschließend importiert Intellij automatisch generierte Quellen in das Projekt.

Mehmet Hanoğlu
quelle
Funktioniert, ohne die Ordnerstruktur selbst durcheinander zu bringen!
szab.kel
Diese Antwort verdient höher zu sein - viel bequemer als die akzeptierte Antwort
stusrob
4
Beachten Sie, dass Sie in der neuesten Version von Intellij 2019.1 auf die zweite Schaltfläche im Maven-Menü klicken können (rechts erweitern Sie die Maven-Seitenleiste, oben, zweite Schaltfläche)
Roeland Van Heddegem
Ich musste auch meine maven settings.xml überprüfen, die auf das falsche, nicht standardmäßige Repo zeigte
Jonathan
Das war der Trick für mich
Nicola Amadio
22

Mit gradle werden die Projekteinstellungen gelöscht, wenn Sie die gradle-Einstellungen aktualisieren. Stattdessen müssen Sie die folgenden Zeilen (oder ähnliche) in Ihr build.gradle einfügen. Ich verwende kotlin also:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
Zhywu
quelle
Dies funktionierte für mich sowohl für den Projektimport von IntelliJ als auch für gradle idea. Vielen Dank! :)
Chris Cooper
Ja - bester Tipp verfügbar. George wurde wütend!
Hoobajoob
Funktioniert für mich zu. Ich habe diese Lösung mit Mapstruct, Springframework und ComponentModel = "Spring"
-Szenario verwendet
16

Die Reparatur

Gehen Sie zu Projektstruktur - Module - Quellordner und suchen Sie target/generated-sources/antlr4/com/mycompany- Klicken Sie auf Eigenschaften bearbeiten und setzen Sie das Paketpräfix auf com.mycompany.

Das ist genau der Grund , warum wir festlegen können Paketpräfix auf Quelle Verz.


Anderes aber verwandtes Problem hier

Vlastimil Ovčáčík
quelle
1
Dieser Fix ist der einzige, der in den Tagen des Suchens für mich funktioniert hat. Vielen Dank!
user1660256
Oh danke, ich habe gerade Intellij aktualisiert und sie haben ihre Symbole geändert. Ich hätte nicht gedacht, dass der orangefarbene Ordner bedeuten würde, dass es sich nicht um eine Quelle handelt.
Pieter De Bie
einen halben Tag habe ich danach gesucht. Arbeitete für mich mit antlr4. Vielen Dank!
Piotr Tempes
1
Für ANTLR> = 4.5.3 (vielleicht auch früher) src/main/antlr4/<path-to-package>/würde es erscheinen , solange sich meine Grammatik in befindet target/generated-sources/antlr4/<path-to-package>. IntelliJ hat das richtige Verzeichnis automatisch als Quellstamm markiert und es war kein Paketpräfix erforderlich. Ich vermute, dass dieses Update benötigt wird, wenn Leute ihre Grammatiken direkt einfügen src/main/antlr4, was oft aus irgendeinem Grund empfohlen wird.
Alex Reinking
5

Wer auch immer dieses Plugin geschrieben hat, hat es richtig vermasselt. So geht das nicht!

Jede Problemumgehung wäre ein großer Hack, machen Sie den Plugin-Entwickler auf seinen Fehler aufmerksam.

Entschuldigung, das ist das einzige, was zu tun ist.


OK, hier ist ein Hack. Verwenden Sie direkt nach der Ausführung Ihres Plugins das Antrun-Plugin, um das Verzeichnis an einen anderen Ort zu verschieben:

<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 diesem Beispiel toolnamesollte alles ersetzt werden, das das Plugin, das den Code erstellt hat, eindeutig identifiziert und comfür das Stammverzeichnis der erstellten Pakete steht. Wenn Sie mehrere Paketwurzeln haben, benötigen Sie wahrscheinlich mehrere <move>Aufgaben.

Aber wenn das Plugin den Ordner als Quellordner hinzufügt, sind Sie fertig.

Sean Patrick Floyd
quelle
Danke Sean. Ich habe tatsächlich festgestellt, dass Intellij sowohl Ziel / generierte Quellen / com als auch Ziel / generierte Quellen hinzufügt (dies wird explizit im Abschnitt "Ressource" als Quellverzeichnis hinzugefügt). Gibt es eine andere Möglichkeit, um zu verhindern, dass das Erste passiert? Wenn nein, werde ich Ihre Problemumgehung versuchen.
Kannan Ekanath
1
Ja, der Autor sollte Verwendung haben target/generated-sources/my-tool.
Vlastimil Ovčáčík
1

Vielleicht können Sie der Generierungsquellenphase, in der der Ordner verschoben wird, einen Schritt hinzufügen?

Christoffer Hammarström
quelle
1

Ich hatte vor ein paar Monaten das gleiche Problem mit Eclipse beim Importieren meines Projekts. Jetzt hatte ich das gleiche mit IntelliJ. So hat mir jemand geholfen, dies in IntelliJ zu lösen:

Menü => Ansicht => Extras Fenster => Maven-Projekt Wählen Sie im Wert spring_user => Konfiguration ausführen die Option Neuinstallation. Dies sollte eine Neuinstallation durchführen und danach sollten Sie in der Lage sein, die Klassen zu sehen Geben Sie hier die Bildbeschreibung ein

ElizabethM
quelle
1

Es wurde behoben, indem "Ausgeschlossen" in der Moduleinstellung entfernt wurde (Rechtsklick auf Projekt, "Moduleinstellungen öffnen"). Geben Sie hier die Bildbeschreibung ein

JP
quelle
0

Die einzige funktionierende Bedingung war nach mehreren Versuchen, den versteckten .idea-Ordner aus dem Stammprojektordner zu entfernen und ihn erneut aus Intellij zu importieren

Jonathan
quelle
0

Ich wollte den zuvor von DaShaun gemachten Kommentar aktualisieren , aber da es mein erster Kommentar ist, erlaubte mir die Anwendung nicht.

Trotzdem verwende ich Eclipse und nachdem ich das unten erwähnte Code-Snippet zu meiner pom.xml hinzugefügt habe, wie von Dashun vorgeschlagen, habe ich das mvn clean-Paket ausgeführt, um die avro-Quelldateien zu generieren, aber es wurde immer noch ein Kompilierungsfehler im Arbeitsbereich angezeigt.

Ich habe mit der rechten Maustaste auf Projektname -> Maven -> Projekt aktualisieren geklickt und das Projekt aktualisiert, wodurch die Ziel- / generierten Quellen als Quellordner zu meinem Eclipse-Projekt hinzugefügt wurden.

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