2012-11-19 70 views
5

我有螞蟻執行一個罐子用下面的代碼傳遞Java系統屬性以螞蟻測試

<target name="start.my.jar" description="start my jar"> 
    <echo message="Starting the jar" /> 
    <java jar="${jars.dir}/${my.stub.jar}" fork="true" dir="${jars.dir}" spawn="true"> 
      <sysproperty key="properties.filename" value="${basedir}/path/path/path/filename.properties"/> 
     <arg value="start" /> 
    </java> 
</target> 

罐內部有一個與下面的代碼的類

public static MyFacade createFacade() throws FileNotFoundException, IOException { 
    return createFacade(System.getProperty(properties.filename)); 
}  

,然後有螞蟻測試目標是這樣配置的

<target name="test" depends="compile, support" description="perform unit tests"> 
    <mkdir dir="${build.test}" /> 
    <mkdir dir="${test-classes.dir}" /> 
    <javac srcdir="${build.test}" destdir="${test-classes.dir}" debug="${debug}" nowarn="${nowarn}" includeantruntime="false" deprecation="${deprecation}"> 
     <classpath refid="main.classpath" /> 
    </javac> 
    <junit printsummary="yes" haltonfailure="yes" showoutput="true" dir="${test-classes.dir}" fork="true" forkmode="perBatch" failureproperty="junit.failure" errorproperty="junit.error" haltonerror="no"> 
     <jvmarg value="-Xmx1G" /> 
     <jvmarg value="-Dcom.sun.management.jmxremote" /> 

     <classpath> 
      <pathelement location="${test-classes.dir}" /> 
      <pathelement location="${classes.dir}" /> 
      <!-- 
      For module restful_api 
      --> 
      <pathelement location="${build.deploy}" /> 
      <pathelement location="${classes.dir}" /> 
      <fileset dir="${build.lib}"> 
       <include name="*.jar" /> 
      </fileset> 
     </classpath> 
     <formatter type="plain" /> 
     <batchtest fork="yes" todir="${build.test}"> 
      <fileset dir="${build.test}"> 
       <include name="**/*AllTests.java" /> 
       <include name="**/*TestCase.java" /> 
      </fileset> 
     </batchtest> 
    </junit> 
    <fail message="Unittest failures - please check" if="junit.failure" /> 
    <fail message="Unittest errors - please check" if="junit.error" /> 
</target> 

我在這個測試目標模塊中的測試無法獲得屬性對於我在start.my.jar目標中指定的文件。有什麼我做錯了嗎?

SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container 
[junit] java.lang.NullPointerException 
[junit]  at java.io.File.<init>(File.java:222) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.getInputStream(MyFacadeFactory.java:47) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.loadFacade(MyFacadeFactory.java:43) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.createFacade(MyFacadeFactory.java:32) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.createFacade(MyFacadeFactory.java:28) 
[junit]  at com.mycompany.myproduct.sdk.resources.impl.TransactionResourceImpl.<init>(TransactionResourceImpl.java:70) 
[junit]  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
[junit]  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
[junit]  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
[junit]  at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
[junit]  at com.sun.jersey.server.spi.component.ResourceComponentConstructor._construct(ResourceComponentConstructor.java:191) 
+1

嘗試返回createFacade(System.getProperty( 「properties.filename」)); – user1097489

+0

我犯了一個錯誤,它實際上是properties.filename,但仍然不起作用 – ThaSaleni

+0

你可以發佈stacktrace嗎? – user1097489

回答

1

搞怪夠了這個工作:

<jvmarg value="- Dproperties.filename=${basedir}/path/path/path/filename.properties"/> 

我用了一個前:

<sysproperty key="" value=""/> 

從來沒有做過

4

那是因爲你添加的屬性只是java的目標,這是一個獨立的運行時環境。 junit目標指定一個新的環境(因爲您爲它設置了一些JVM開關,您還需要指定系統屬性)。

試試這個:

<junit ...> 
    <sysproperty key="properties.filename" 
      value="${basedir}/path/path/path/filename.properties"/> 
    .... 
</junit> 

另一種方法是運行與-Dproperties.filename=...鍵每次ant任務(你可以設置在外部運行配置在Eclipse)。然而,缺點是每次你想運行任務時都要記住這一點(例如,在CI構建中或重新簽出)。

+0

我已經這樣做了,仍然得到一個空指針...也許我應該也發佈堆棧跟蹤 – ThaSaleni

+0

我必須將該屬性作爲配置傳遞給構建文件,因爲我需要它充分自動CI構建 – ThaSaleni

+0

足夠有趣這工作 我之前使用' 從來沒有工作 – ThaSaleni