2011-08-26 37 views
2

我試圖運行一個Java類作爲我的項目部署(我想在部署時創建一些資源,然後可以在運行時讀取)。使用maven運行項目的java類從屬性

大多數情況下,我使用maven構建循環 - 尤其是依賴管理。

這是我得到的;創建一個路徑(run),並使用maven ant任務添加maven的依賴關係,然後運行一個調用java類(MyClass)的目標,該類已被編譯到目標\ src目錄中的... MyClass.class ,使用該目錄的類路徑和上面指定的運行路徑。

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

我知道目標\類是正確的 - 如果我註釋掉除了運行的路徑,它找到了類,但報告說,一些在類的進口不可用的類路徑上。

然而,當我運行它,我得到以下堆棧跟蹤:

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 

對我來說,這看起來像一個例外是在螞蟻的代碼被扔在添加路徑設置爲的過程classpath,但我可能是錯的。

任何人都可以提出(以下任一):

  1. 我怎麼可能會去有關調試呢?

  2. 另一種方法來做我想做的事情(上面描述的 )?

回答

2

再往播放給了我一個可行的解決方案......

而不是指的Maven的依賴關係的路徑,可以參考我給他們使用的文件集:

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

我不知道其他方法發生了什麼,無論是用戶錯誤還是錯誤,所以如果有人有任何建議,我會很感激評論。

+0

如果我能對這500次投票,我會:p。 –