web-dev-qa-db-fra.com

Impossible d'utiliser Intellij avec un dossier de sources générées

Question associée Comment configurer IntelliJ IDEA et/ou Maven pour ajouter automatiquement des répertoires avec le code source Java généré à l'aide de jaxb2-maven-plugin?

J'ai un plugin personnalisé qui génère des sources sous target/generated-sources (Notez aucun nom d'outil ici). Je reçois donc des sources telles que target/generated-sources/com/mycompany... etc.

Ce format ne peut pas être changé du tout, donc je pourrai configurer Intellij pour l'ajouter en tant que dossier source. À partir de maintenant, je peux voir que Intellij a ajouté target/generated-sources/com comme dossier source.

Veuillez noter que je n'ai pas la possibilité de configurer le plugin!

UPDATE 1: je ne suis pas d'accord avec le fait que je DOIS mettre mes sources générées dans un dossier de noms d'outil. C'est peut-être une bonne convention, mais si je n'ai qu'un seul générateur, je n'ai pas besoin de le mettre là-bas? Encore une fois, dans mon pom.xml, j'ai une section resources qui indique clairement que target/generated-sources devrait être traité comme un dossier source. Cela fonctionne parfaitement sous Eclipse, je ne vois donc pas pourquoi Intellij ne respecterait pas mes paramètres. 

TL; DR -> Quand je mets target/generated-sources dans la section des ressources de pom.xml, pourquoi Intellij est-il trop zélé pour ajouter target/generated-sources/com au chemin de classe?

60
Kannan Ekanath

Vous pouvez simplement changer la structure du projet pour ajouter ce dossier en tant que répertoire "source".

Structure du projet → Modules → Cliquez sur le dossier generated-sources et transformez-le en dossier sources.

Ou:

<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

J'utilise la solution Maven (application SpringBoot):

  1. Clic droit dossier du projet
  2. Sélectionner Maven
  3. Sélectionner Générer des sources et mettre à jour des dossiers

Ensuite, Intellij importe automatiquement les sources générées dans le projet.

19
Mehmet Hanoğlu

Avec dégradé, les paramètres du projet seront effacés chaque fois que vous actualiserez les paramètres de dégradé. Au lieu de cela, vous devez ajouter les lignes suivantes (ou similaires) dans votre build.gradle, j'utilise donc kotlin:

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

Le correctif

Allez à Structure du projet - Modules - Dossiers sources et recherchez le target/generated-sources/antlr4/com/mycompany - cliquez sur Editer les propriétés et réglez Préfixe du paquet sur com.mycompany.

C’est exactement la raison pour laquelle nous pouvons définir le préfixe Package dans les répertoires sources.


Problème différent mais lié ici

11

Celui qui a écrit ce plugin a tout gâché. Ce n'est pas la façon de le faire!

Toute solution de contournement serait un énorme piratage, informez le développeur du plugin de son bogue.

Désolé, c'est la seule chose à faire.


OK, voici un hack, directement après l'exécution de votre plugin, utilisez le plugin antrun pour déplacer le répertoire ailleurs:

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

Dans cet exemple, toolname doit être remplacé par tout ce qui identifie de manière unique le plug-in qui a créé le code et com représente la racine des packages créés. Si vous avez plusieurs racines de package, vous aurez probablement besoin de plusieurs tâches <move>.

Mais si le plugin ajoute le dossier en tant que dossier source, alors vous êtes foutu.

3

J'ai eu le même problème avec Eclipse il y a quelques mois lors de l'importation de mon projet. Maintenant, j'ai eu la même chose avec intelliJ . Voici comment quelqu'un m'a aidé à résoudre ceci dans IntelliJ:

Menu => Affichage => Outils windows => Projet Maven Dans la valeur spring_user => Exécuter la configuration, choisissez une nouvelle installation . Cette opération devrait être effectuée avec une nouvelle installation, après quoi vous devriez pouvoir voir les classes  enter image description here

1
ElizabethM

Peut-être que vous pouvez ajouter une étape à la phase de génération de sources qui déplace le dossier?