web-dev-qa-db-de.com

Intellij kann nicht mit einem generierten Quellordner verwendet werden

Verwandte question Wie kann ich IntelliJ IDEA und/oder Maven so konfigurieren, dass automatisch Verzeichnisse mit Java-Quellcode hinzugefügt werden, die mit jaxb2-maven-plugin generiert wurden?

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

Dieses Format kann nicht geändert werden. Daher kann ich Intellij so konfigurieren, dass es als Quellordner hinzugefügt wird. Ab sofort sehe ich, dass Intellij als Quellordner target/generated-sources/com 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 kann eine gute Konvention sein, aber wenn ich nur einen Generator habe, brauche ich ihn nicht dort hinzustellen? In meiner pom.xml habe ich wieder einen resources-Abschnitt, der eindeutig angibt, dass target/generated-sources als Quellordner behandelt werden sollte. Dies funktioniert perfekt in Eclipse, daher habe ich keine Ahnung, warum Intellij meine Einstellungen nicht respektiert. 

TL; DR -> Wenn ich target/generated-sources in den Ressourcenabschnitt von pom.xml stecke, warum ist Intellij zu eifrig, target/generated-sources/com dem Klassenpfad hinzuzufügen?

60
Kannan Ekanath

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

Projektstruktur → Module → Klicken Sie auf den Ordner generated-sources und legen Sie einen Ordner mit sources fest.

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

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

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

Anschließend importiert Intellij die generierten Quellen automatisch in ein Projekt.

19
Mehmet Hanoğlu

Mit Gradle werden die Projekteinstellungen gelöscht, wenn Sie die Gradle-Einstellungen aktualisieren. Stattdessen müssen Sie die folgenden Zeilen (oder ähnliches) in Ihr build.gradle einfügen.

sourceSets {
    main {
        Java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
16
zhywu

Die Reparatur

Gehen Sie zu Projektstruktur - Modules - Source Folders und suchen Sie den target/generated-sources/antlr4/com/mycompany - klicken Sie auf Eigenschaften bearbeiten und setzen Sie Package prefix auf com.mycompany.

Dies ist genau der Grund, warum wir Package prefix für Quellverzeichnisse setzen können.


Anderes aber verwandtes Problem hier

11

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

Jede Problemumgehung wäre ein riesiger Hacker. Der Plugin-Entwickler wird auf seinen Fehler aufmerksam gemacht.

Sorry, das ist das einzige was zu tun ist.


OK, hier ist ein Hack, direkt nach der Ausführung Ihres Plugins, verwenden Sie 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 sollte toolname durch etwas ersetzt werden, das das Plugin, mit dem der Code erstellt wurde, eindeutig identifiziert, und com steht für das Stammverzeichnis der erstellten Pakete. Wenn Sie mehrere Paketstammverzeichnisse haben, benötigen Sie wahrscheinlich mehrere <move>-Tasks.

Wenn das Plugin den Ordner als Quellordner hinzufügt, sind Sie jedoch vermasselt.

3

Ich hatte vor ein paar Monaten das gleiche Problem mit Eclipse, als ich mein Projekt importierte. Nun hatte ich dasselbe mit intelliJ ..__ Hier hat mir jemand geholfen, das in IntelliJ zu lösen:

Menu => View => Tools windows => Maven Project.__Im spring_user value => Run Configuration wählen Sie clean install . Dies sollte eine Neuinstallation sein und danach sollten Sie die Klassen sehen können  enter image description here

1
ElizabethM

Vielleicht können Sie der Erzeuger-Quellen-Phase einen Schritt hinzufügen, der den Ordner verschiebt.