2010-03-29 32 views
0

J'ai été occupé dans mon projet en créant une webapp (en struts) qui gère maven, en utilisant maven-2.2.1-uber.jar link text. Le problème vient quand le patron dit qu'il doit utiliser certains archétypes que l'entreprise a créés (donc pas d'archétypes prédéfinis pour vous vilain garçon!). Donc ok, j'utilise l'option -DarchetypeRepository (avec ServletWrapper j'obtiens ma direction web complète, parce que le référentiel sera dans l'application), et le log semble le trouver, mais alors la compilation échoue - misérablement - avec ce petit texte ' Build Failure - L'artefact défini n'est pas un archétype aussi simple que cela. Bien sûr, j'ai beaucoup de lignes INFO qui disent abshutily nothig connexes. J'ai lu le guide définitif de Maven à la recherche d'une sorte d'aide, mais il a été décevant au mieux. Mes pensées sont que mai me manquer quelque part de tous les dossiers de l'arborescence de certains xml qui effectivement maven que mon pom.xml est un archétype pas un projet. Mais je ne peux vraiment rien trouver sur le net ou dans les manuels qui explique comment l'archétype: générer (avec des paramètres spéciaux) fonctionne et où je dois placer chaque dossier et/ou fichier. Donc juste pour dire mes pensées à haute voix (et j'espère que vous comprenez ce que j'essaie de demander): J'ai un modèle où je fais des changements xml (variables, etc ...), alors je dois appeler maen et faire un archétype: générer avec un projet variable. Le problème semble être que ma confuguration réelle n'aime pas ce que je fais. Après la génération de l'archétype, la chance créera des arborescences de répertoires et me laissera un fichier POM.xml quelque part je dois encore faire des changements de variables et plus de xml gérer des trucs, donc ça devrait être très gentil de maven de ne rien détruire dans ce processus.Java et Maven générant -et utilisant- mon propre archétype

Des idées pour lesquelles cette chose-maven n'est pas heureuse, après que mon archétype est définitivement un archétype? Allthought Je pense que le code est correct, il pourrait être faux, car j'utilise maven-ubber et j'appelle le CSMavenCli.main réel (String [, ClassWorld], je ne pense pas que ce soit le cas cette fois-ci.

Merci et à tous! :)

Aléatoire.

Répondre

1

But I really, really, can't find anything on the net or in the manuals that explains easy-handed how the archetype:generate (with special parameters) works and where I have to put every folder and/or file.

Votre meilleur pari serait de regarder les sources d'archétypes existants à mon humble avis, idéalement quelque chose proche de ce que vous faites. Honnêtement, je ne suis pas sûr d'avoir compris ce que vous faites, non, aucune idée.

0

est ici une supposition ... le message:
« Build non - L'artefact défini n'est pas un archétype », décrit le problème.

Je suppose que ce que la version maven reçoit de votre application web n'est pas un archétype.
Essayez de pointer votre navigateur Web à l'url de l'archétype que votre application web sert, il devrait ressembler à this. Si ce n'est pas le cas, vérifiez que votre application Web n'essaie pas de traiter le fichier XML résultant en tant que modèle de vue et que le fichier XML est transmis à la réponse HttpResponse avec le type mime correct.
Vérifiez également que la ressource archétype n'est pas protégée par les définitions de sécurité dans votre fichier web.xml.

+0

Merci pour votre réponse :) Malheureusement, l'application web cherche au bon endroit et je sers le bon pom.xml. Aussi, le web.xml a très peu de sécurité puisqu'il s'agira d'un projet intranet (il est en fait tous désactivé pour les problèmes de développement). J'ai essayé avec la console de maven (voir mon autre poste) et est probablement une configuration maven que je échoue à. Merci! – Random

1

Tout d'abord, merci d'avoir répondu :)

Aujourd'hui, je suis en train d'obtenir une meilleure compréhension de la façon dont fonctionne les archétypes regardant le tutoriel sur maven here, althought est encore très décevant.

Mon problème est que j'ai une erreur de build dans maven lorsque j'essaie de faire l'archétype mvn: générer une instruction. C'est, aussi simple que possible, mon problème. Le problème de construction dit que 'l'artefact défini n'est pas un archétype'.

J'ai essayé l'archétype de l'instruction décreaptée: create et l'erreur est plus ou moins la même mais il ajoute que 'Embedded error: Le descripteur META-INF/maven/archetype.xml est introuvable.' Dans mon archétype, il y a un fichier archetype.xml, donc il semble que l'instruction décryptée est décrémentée pour une bonne raison.

Mon instruction totale est au suivant

mvn archetype:generate 
-DgroupId=my_groupid 
-DartifactId=my_artifactid 
-Dversion=1.0 
-DarchetypeGroupId=archetype-foo-lib 
-DarchetypeArtifactId=my.archetype.foo 
-DarchetypeVersion=1.0 
-DarchetypeRepository=C:/.m2/repository 
-Dbasedir=C:/.m2/repository/archetype-foo-lib 
-B 
-DinteractiveMode=false 

Dans basedir J'ai le pom.xml et le dom4j.jar et le dépôt est en place (dans un petit serveur tomcat). De plus, l'archétype est installé et archetypegroupid, archetypeartifacid et archetypeversion sont les mêmes que dans le dossier src \ main \ resources \ archetype-resources. J'ai également essayé de changer les barres obliques à '\' dans le base (juste au cas où) sans de meilleurs résultats.

Comme j'essaie maintenant de le faire directement dans la console maven, vous pouvez oublier le projet webapp et tout ça. Je peux espérer que ça marchera une fois qu'il aura commencé à fonctionner dans la console.

Hélas! J'ai aussi stacktrace (comme je l'ai fait avec -e paramètre)

+ Error stacktraces are turned on. 
[INFO] Scanning for projects... 
[INFO] Searching repository for plugin with prefix: 'archetype'. 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Maven Default Project 
[INFO] task-segment: [archetype:generate] (aggregator-style) 
[INFO] ------------------------------------------------------------------------ 
[INFO] Preparing archetype:generate 
[INFO] No goals needed for project - skipping 
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus 
.velocity.ContextClassLoaderResourceLoader'. 
[INFO] Setting property: velocimacro.messages.on => 'false'. 
[INFO] Setting property: resource.loader => 'classpath'. 
[INFO] Setting property: resource.manager.logwhenfound => 'false'. 
[INFO] [archetype:generate {execution: default-cli}] 
[INFO] Generating project in Batch mode 
[INFO] Archetype defined by properties 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] The defined artifact is not an archetype 
[INFO] ------------------------------------------------------------------------ 
[INFO] Trace 
org.apache.maven.BuildFailureException: The defined artifact is not an archetype 

at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa 
ultLifecycleExecutor.java:715) 
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandalone 
Goal(DefaultLifecycleExecutor.java:569) 
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau 
ltLifecycleExecutor.java:539) 
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan 
dleFailures(DefaultLifecycleExecutor.java:387) 
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen 
ts(DefaultLifecycleExecutor.java:284) 
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi 
fecycleExecutor.java:180) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328) 
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) 
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362) 
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:6 
0) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) 
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) 
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) 

at org.codehaus.classworlds.Launcher.main(Launcher.java:375) 
Caused by: org.apache.maven.plugin.MojoFailureException: The defined artifact is 
not an archetype 
at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execu 
te(CreateProjectFromArchetypeMojo.java:201) 
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi 
nManager.java:490) 
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa 
ultLifecycleExecutor.java:694) 
... 17 more 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 2 seconds 
[INFO] Finished at: Tue Mar 30 11:08:59 CEST 2010 
[INFO] Final Memory: 8M/15M 
[INFO] ------------------------------------------------------------------------ 

Depuis le dépôt pourrait être mauvais, je l'ai aussi changé le -DarchetypeRepository à c: .m2 \ dépôt, mais il échoue aussi myserably accomplir quelque chose de différent.

J'espère que ce post est plus perspicace.

Merci pour tous :) aléatoire

Edit: Ok, les nouvelles données. Je sais savoir pourquoi il ne semble pas être un archétype, et il semble que mvn archetype: generate -DarchetypeCatalog = local a 0 archétypes. Il semble donc que ce n'est pas installé. J'ai fait le mvn install et le mvn archetype: crawl mais cela ne fonctionne pas. Des idées pour lesquelles je ne peux pas installer mes propres archétypes? Merci encore :)

Editer à nouveau: Problème avec les archétypes locaux résolus, j'ai dû déplacer le fichier archetype-catalog.xml de ~/.m2/repository/à ~/.m2/puis juste comme ça Maven a trouvé mon archétypes locaux. Étrange de tout, ça me donne toujours la même erreur. J'ai également changé mon référentiel d'archétype et mon répertoire de base.

Dernière édition (j'espère!): Bien, j'ai finalement trouvé l'erreur. C'est tellement stupide que je me sens obligé de l'écrire (ça fait trois jours que je le sais). Mon archetypeArtifactId et mon archetypeGroupId ont été échangés (je veux dire, l'un était l'autre). Une fois que j'ai commencé à passer les paramètres corrtect (définis dans archetype-catalog.xml que, bien que, je devais encore passer à l'endroit correct) il a commencé à faire des merveilles. Merci aussi à tous ceux qui ont lu ou écrit :)