web-dev-qa-db-fra.com

Emplacement des fichiers source générés pour la structure de répertoires maven

Outre le dossier src/main/Java, nous avons un dossier contenant certaines sources Java générées requises pour les sources principales. La génération de code est appelée manuellement, si nécessaire. La source générée est vérifié dans le référentiel source. Tout sera construit et emballé ensemble.

Quel serait le meilleur emplacement pour Java sources générés qui seront compilés avec les sources principales? Devrait-ce être:

  • /src/generated/Java (suivant la même logique de nommage pour src/testInt/Java pour les tests d'intégration)
  • /generated-src/main/Java (en collision avec "le répertoire src contient tout le matériel source pour la construction du projet")
  • /src/main/generated-Java (bon ... generated-Java n'est pas un type)
  • ...?

La première option semble être la plus appropriée dans ce cas. Qu'est-ce que tu penses? Y at-il quelque chose dans Maven docs qui décrit cette situation (que j’ai oubliée)? Connaissez-vous des pensions ayant une structure similaire?

Je vous remercie.

Réponse

Comme suggéré par @ Absurd-Mind, la direction à laquelle nous pensons est de scinder la source en sous-modules (ce qui fonctionne bien en dégradé). Ainsi, la source générée et une autre source associée iront dans son propre sous-module (ils produiront l'artefact séparé) et le reste ira dans un autre sous-module, qui utilise celui-ci. Je vous remercie.

30
igr

Je pense que l'emplacement dépend de la manière dont la source est générée et traitée.

  1. Le code source est généré automatiquement pendant le processus de construction : Ensuite, j’utiliserais target/main/Java/, target/test/Java/ et ainsi de suite. Ce code n'est pas archivé dans CVS car vous pouvez le reconstruire assez facilement. Si vous nettoyez votre projet, le répertoire target sera supprimé et la source sera reconstruite.

  2. Le code source est généré manuellement par un outil externe ou similaire : Je voudrais utiliser generated/src/main/Java/, generated/src/test/Java/, generated/src/main/resources/ et ainsi de suite. Ce code doit être archivé. Un avantage est que, dès que vous voyez que le nom du répertoire de niveau supérieur est generated, vous savez que tous les fichiers/répertoires ci-dessous sont également générés. De plus, vous avez la structure de répertoires standard maven sous le répertoire de niveau supérieur. Un autre point est que le nettoyage est facile, il suffit de supprimer generated et de le recréer, sans parcourir beaucoup d'autres répertoires (comme dans votre exemple: src/main/generated-Java et src/test/généré-Java).

EDIT: Une autre solution intéressante serait de créer un projet maven qui ne contiendrait que la source générée telle que myproject-generated-1.0.3.jar. Ce projet serait une dépendance dans votre application réelle. Ensuite, il vous suffira de mettre votre source générée int src/main/Java.

34
Absurd-Mind

Autant que je sache, il n’existe pas de structure de dossier standard pour les sources générées. Dans mes projets, je préfère le type de notation src/gen/Java.

3
bhdrkn

Dans le fichier source du projet Maven, stockez dans src/main/Java, src/main/resources et stockez la classe de test dans src/test/Java. Dans Maven généré (code de compilation) code stocké dans le dossier cible. Lorsque vous construisez votre projet maven, tout le code généré doit être mis à jour dans le dossier cible.

0
sus007