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?
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>
Ich verwende eine Maven-Lösung (SpringBoot-Anwendung):
Anschließend importiert Intellij die generierten Quellen automatisch in ein Projekt.
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"
}
}
}
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
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.
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
Vielleicht können Sie der Erzeuger-Quellen-Phase einen Schritt hinzufügen, der den Ordner verschiebt.