2011-08-26 2 views
2

J'essaie d'exécuter une classe Java dans le cadre du déploiement de mon projet (je veux créer des ressources au déploiement, qui peuvent ensuite être lues à l'exécution).Exécution du projet java class à partir de ant en utilisant maven pour les dépendances

Pour l'essentiel, j'utilise maven pour le cycle de construction - en particulier pour la gestion des dépendances.

Ce que je dois faire; créer un chemin (run), et ajouter les dépendances de maven en utilisant les tâches de maven ant, puis lancer une cible qui appelle une classe java (MyClass), qui a été compilée à ... MyClass.class dans le répertoire target \ src , en utilisant un chemin de classe de ce répertoire et le chemin d'exécution spécifié ci-dessus.

<path id="run" /> 
<artifact:dependencies pathid="run"> 
    <artifact:pom file="pom.xml" id="my_project" /> 
</artifact:dependencies> 

<target name="runMyClass"> 
    <java classname="...MyClass" fork="yes" maxmemory="512M" append="true"> 
    <classpath> 
     <pathelement location="target\classes"/> 
     <pathelement id="run" /> 
    </classpath> 
    </java> 
</target> 

Je sais que les classes cibles \ est correct - si je commente à l'ajout du chemin d'exécution, il trouve la classe, mais rapporte que certaines des importations dans la classe ne sont pas disponibles sur le classpath.

Cependant, quand je lance, je reçois la trace de la pile suivante:

C:\somepath\my_project\build.xml:118: java.lang.NullPointerException 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:116) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.Target.execute(Target.java:390) 
at org.apache.tools.ant.Target.performTasks(Target.java:411) 
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
at org.apache.tools.ant.Main.runBuild(Main.java:809) 
at org.apache.tools.ant.Main.startAnt(Main.java:217) 
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:32) 
Caused by: java.lang.NullPointerException 
at org.apache.tools.ant.types.resources.FileResourceIterator.addFiles(FileResourceIterator.java:104) 
at org.apache.tools.ant.types.resources.FileResourceIterator.<init>(FileResourceIterator.java:95) 
at org.apache.tools.ant.types.Path$PathElement.iterator(Path.java:124) 
at org.apache.tools.ant.types.resources.Union.getCollection(Union.java:123) 
at org.apache.tools.ant.types.resources.Union.getCollection(Union.java:107) 
at org.apache.tools.ant.types.resources.BaseResourceCollectionContainer.cacheCollection(BaseResourceCollectionContainer.java:265) 
at org.apache.tools.ant.types.resources.BaseResourceCollectionContainer.iterator(BaseResourceCollectionContainer.java:142) 
at org.apache.tools.ant.types.Path.iterator(Path.java:710) 
at org.apache.tools.ant.types.resources.Union.getCollection(Union.java:123) 
at org.apache.tools.ant.types.resources.Union.list(Union.java:86) 
at org.apache.tools.ant.types.Path.list(Path.java:378) 
at org.apache.tools.ant.types.Path.addExisting(Path.java:331) 
at org.apache.tools.ant.types.Path.addExisting(Path.java:319) 
at org.apache.tools.ant.types.Path.concatSpecialPath(Path.java:572) 
at org.apache.tools.ant.types.Path.concatSystemClasspath(Path.java:532) 
at org.apache.tools.ant.types.CommandlineJava.haveClasspath(CommandlineJava.java:647) 
at org.apache.tools.ant.types.CommandlineJava.addCommandsToList(CommandlineJava.java:437) 
at org.apache.tools.ant.types.CommandlineJava.getCommandline(CommandlineJava.java:405) 
at org.apache.tools.ant.types.CommandlineJava.describeCommand(CommandlineJava.java:482) 
at org.apache.tools.ant.taskdefs.Java.checkConfiguration(Java.java:176) 
at org.apache.tools.ant.taskdefs.Java.execute(Java.java:107) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
... 16 more 

Pour moi, cela ressemble à une exception est levée dans le code de fourmi dans le processus d'ajout du chemin d'accès défini au classpath, mais je peux me tromper.

Quelqu'un peut-il suggérer (une des options suivantes):

  1. comment je pourrais aller sur le débogage cela?

  2. une approche alternative pour faire ce que je suis en train de faire (décrit ci-dessus)?

Répondre

2

Un peu plus loin le jeu m'a donné une solution viable ...

Plutôt que de se référer aux dépendances de Maven comme un chemin, je peux les consulter en utilisant un ensemble de fichiers:

<fileset id="run" /> 
<artifact:dependencies filesetid="run"> 
    <artifact:pom file="pom.xml" id="my_project" /> 
</artifact:dependencies> 

<target name="runMyClass"> 
    <java classname="...MyClass" fork="yes" maxmemory="512M" append="true"> 
    <classpath> 
     <pathelement location="target\classes"/> 
     <fileset refid="run" /> 
    </classpath> 
    </java> 
</target> 

Je ne sais pas ce qui se passait avec l'autre approche, qu'il s'agisse d'une erreur de l'utilisateur ou d'un bogue, alors si quelqu'un a des suggestions, j'apprécierais les commentaires.

+0

Si je pouvais voter cette fois-ci 500 fois, je le ferais: p. –

Questions connexes