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

87

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 pas de nom d'outil ici). Donc j'obtiens des sources comme target/generated-sources/com/mycompany... etc.

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

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

MISE À JOUR 1 : Je ne suis pas d'accord avec le fait que je DOIS mettre mes sources générées sous un dossier de nom 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à? Encore une fois, dans mon pom.xml, j'ai une resourcessection qui indique clairement que cela target/generated-sourcesdoit être traité comme un dossier source. Cela fonctionne parfaitement bien dans Eclipse, donc je n'ai aucune idée pourquoi Intellij ne respecterait pas mes paramètres.

TL; DR -> Quand je mets target/generated-sourcesdans la section des ressources, pom.xmlpourquoi Intellij est-il trop zélé à ajouter target/generated-sources/comau chemin de classe ?

Kannan Ekanath
la source
1
Jetez un œil à stackoverflow.com/questions/10735380/…
Vadzim
Essayez cette solution, cela peut résoudre votre problème. cliquez ici pour la solution
Asad Abdin
Essayez cette solution, cela peut résoudre votre problème. cliquez ici pour la solution
Asad Abdin

Réponses:

139

Vous pouvez simplement modifier la structure du projet pour ajouter ce dossier en tant que répertoire «source».

Structure du projet → Modules → Cliquez sur le generated-sourcesdossier et faites-en unsources dossier.

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>
DaShaun
la source
4
Cette option semble intéressante. Je perdrais ce paramètre à chaque fois que je lance "mvn idea: idea". Existe-t-il un moyen de déclarer un plugin d'idée maven avec cette "solution de contournement"?
Kannan Ekanath
3
Vous ne pouvez pas ajouter le dossier des sources généré s'il est en cours de construction car IDEA exclut le dossier de construction.
NBW
1
@NBW vous ne pouvez pas manuellement, oui. Mais si vous supprimez votre module puis le réimportez (avec ce plugin configuré), idea reconnaît tout correctement.
Zoltán
3
Vous pouvez également faire un clic droit sur n'importe quel dossier et utiliser "marquer le répertoire comme"
Pieter De Bie
5
Bien que mon pom.xml contienne cet extrait, IDEA n'a pas vu les sources générées. L'exécution a mvn idea:idearésolu le problème dans mon cas. Pour les records.
mmdemirbas
76

J'utilise la solution Maven (application SpringBoot) est:

  1. Cliquez avec le bouton droit sur le dossier de projet
  2. Sélectionnez Maven
  3. Sélectionnez Générer les sources et mettre à jour les dossiers

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

Mehmet Hanoğlu
la source
Fonctionne sans gâcher vous-même la structure des dossiers!
szab.kel
Cette réponse mérite d'être plus élevée - beaucoup plus pratique que la réponse acceptée
stusrob
4
Notez que dans la dernière version d'Intellij 2019.1, vous pouvez cliquer sur le deuxième bouton dans le menu maven (à droite, développez la barre latérale maven, en haut, deuxième bouton)
Roeland Van Heddegem
J'ai également dû vérifier mon maven settings.xml qui indiquait le mauvais repo pas par défaut
Jonathan le
22

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

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
zhywu
la source
Cela a fonctionné pour moi à la fois pour l'importation de projets d'IntelliJ et gradle idea. Merci! :)
Chris Cooper
Oui - meilleur conseil disponible. George était en colère!
Hoobajoob
Fonctionne pour moi. J'ai utilisé cette solution avec le scénario mapstruct, springframework et componentModel = "spring"
dwilda
16

Le correctif

Accédez à Structure du projet - Modules - Dossiers source et recherchez le target/generated-sources/antlr4/com/mycompany- cliquez sur Modifier les propriétés et définissez le préfixe du package sur com.mycompany.

C'est exactement la raison pour laquelle nous pouvons définir le préfixe de package sur les répertoires source.


Problème différent mais lié ici

Vlastimil Ovčáčík
la source
1
Ce correctif est le seul qui a fonctionné pour moi en jours de recherche. Merci!
user1660256
Oh merci, je viens de mettre à jour intellij et ils ont changé leurs icônes. Je ne pensais pas que le dossier orange signifierait que ce n'est pas une source.
Pieter De Bie
une demi-journée, je cherchais ça. A travaillé pour moi avec antlr4. Merci!
Piotr Tempes
1
Pour ANTLR> = 4.5.3 (peut-être plus tôt aussi), tant que ma grammaire était située dans src/main/antlr4/<path-to-package>/, elle apparaîtrait dans target/generated-sources/antlr4/<path-to-package>. IntelliJ a automatiquement marqué le bon répertoire comme racine des sources et aucun préfixe de package n'était nécessaire. Je soupçonne que ce correctif est nécessaire lorsque les gens placent leurs grammaires directement src/main/antlr4, ce qui est souvent recommandé pour une raison quelconque.
Alex Reinking
5

Celui qui a écrit ce plugin a fait une grosse erreur. Ce n'est pas la façon de procéder!

Toute solution de contournement serait un énorme hack, sensibiliser le développeur du plugin à son bug.

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, toolnamedoit être remplacé par tout ce qui identifie de manière unique le plugin qui a créé le code et comreprésente la racine des packages créés. Si vous avez plusieurs racines de package, vous avez probablement besoin de plusieurs <move>tâches.

Mais si le plugin ajoute le dossier comme dossier source, alors vous êtes foutu.

Sean Patrick Floyd
la source
Merci Sean. J'ai effectivement observé qu'Intellij ajoute à la fois target / generated-sources / com ainsi que target / generated-sources (ceci est ajouté comme répertoire source explicitement dans la section "resource"). Y a-t-il un autre moyen d'empêcher la première chose de se produire? Si non, je vais essayer votre solution de contournement.
Kannan Ekanath
1
Oui, l'auteur devrait avoir l'usage target/generated-sources/my-tool.
Vlastimil Ovčáčík
1

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

Christoffer Hammarström
la source
1

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

Menu => Affichage => Outils windows => Projet Maven Dans la valeur spring_user => Exécuter la configuration, choisissez une installation propre. Cela devrait faire une installation propre et après cela, vous devriez être en mesure de voir les classes entrez la description de l'image ici

ElizabethM
la source
1

Résolu le problème en supprimant le "Exclus" dans les paramètres du module (clic droit sur le projet, "Ouvrir les paramètres du module"). entrez la description de l'image ici

JP
la source
0

La seule condition de travail, après plusieurs tentatives, était de supprimer le dossier .idea caché du dossier racine du projet et de le réimporter depuis Intellij

Jonathan
la source
0

Je voulais mettre à jour le commentaire fait précédemment par DaShaun , mais comme c'est la première fois que je commente, l'application ne m'a pas permis.

Néanmoins, j'utilise eclipse et après avoir ajouté l'extrait de code ci-dessous à mon pom.xml comme suggéré par Dashun et j'ai exécuté le package mvn clean pour générer les fichiers sources avro, mais j'obtenais toujours une erreur de compilation dans l'espace de travail.

J'ai cliqué avec le bouton droit sur nom_projet -> maven -> projet de mise à jour et mis à jour le projet, ce qui a ajouté la cible / les sources générées en tant que dossier source à mon projet 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>
anupam
la source