2011-08-26 4 views
2

프로젝트 배포의 일부로 Java 클래스를 실행하려고합니다. 배포시 자원을 만들고 런타임에 읽을 수 있습니다.종속성에 대해 maven을 사용하여 ant에서 프로젝트 java 클래스 실행

대부분 빌드주기에 종속성 관리를 위해 maven을 사용하고 있습니다.

내가 뭘 해야하는지; maven ant 작업을 사용하여 maven에서 종속성을 추가 한 다음 컴파일 된 java 클래스 (MyClass)를 호출하는 대상을 실행하는 중 ... target \ 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

...

, 나는 파일 세트 사용하여 참조 할 수 있습니다 오히려 경로로 받는다는 종속성으로 다스 려보다 :

<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 회 투표를하면 다음과 같이됩니다. –

관련 문제