2011-06-10 15 views
12

मेरे पास एक जावा प्रोजेक्ट है जो धारावाहिक संचार के लिए this driver का उपयोग करता है। सीरियल पोर्ट बनाने के लिए ड्राइवर विंडोज के तहत एक डीएल का उपयोग करता है।जूनिट कार्य में मूल लाइब्रेरी पथ कैसे जोड़ें?

इस परियोजना में कई जुनीट परीक्षण शामिल हैं जो "रन के रूप में -> जुनीट टेस्ट" का सफलतापूर्वक उपयोग कर रहे हैं। हालांकि, मूल लाइब्रेरी का संदर्भ देने वाले परीक्षण विफल होने पर विफल होते हैं (और परीक्षण जो देशी लाइब्रेरी पास का संदर्भ नहीं देते हैं)।

मेरा सबसे अच्छा अनुमान अब तक उस निर्देशिका को जोड़ना है जिसमें मूल पुस्तकालय java.library.path में है, लेकिन मैं build.xml फ़ाइल के माध्यम से ऐसा करने में सफल नहीं हुआ हूं।

क्या कोई व्यक्ति (साफ) समाधान बता सकता है? यहाँ

<path id="compile.classpath"> 
    <fileset dir="${lib}"> 
     <include name="**/*.jar"/> 
    </fileset> 
    <fileset dir="${junit_home}"> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 

<path id="test.classpath"> 
    <pathelement location="${bin}" /> 
    <fileset dir="${lib}"> 
     <include name="**/*.jar"/> 
    </fileset> 
    <fileset dir="${junit_home}"> 
     <include name="**/*.jar"/> 
    </fileset> 
</path> 

<target name="compile"> 
    <mkdir dir="${bin}" /> 
    <echo Message="Compiling src folder..." /> 
    <javac includeantruntime="no" classpathref="compile.classpath" srcdir="${src}" destdir="${bin}" /> 
    <echo Message="Compiling test folder..." /> 
    <javac includeantruntime="no" classpathref="compile.classpath" srcdir="${test}" destdir="${bin}" /> 
</target> 

<target name="test"> 
    <mkdir dir="${test.reports}" /> 
    <junit fork="yes" printsummary="yes" haltonfailure="yes"> 
     <test name="${test.class.name}" todir="${test.reports}" /> 
     <formatter type="xml" /> 
     <classpath refid="test.classpath" /> 
    </junit> 
</target> 

और (एक्सएमएल में) परीक्षण रिपोर्ट का एक हिस्सा है:

यहाँ मेरी build.xml है

<testcase classname="nl.timo.comport.test.buildservertests.ComportFactoryTest" name="testGetInstance" time="0.0" /> 
    <testcase classname="nl.timo.comport.test.buildservertests.ComportFactoryTest" name="testCreateDefaultComport" time="0.016"> 
    <error message="giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String;" type="java.lang.UnsatisfiedLinkError">java.lang.UnsatisfiedLinkError: giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String; 
    at giovynet.nativelink.SerialPort.getStateSerialPortC(Native Method) 
    at giovynet.nativelink.SerialPort.getFreeSerialPort(SerialPort.java:50) 
    at package.comport.GioComport.getFreeSerialPorts(Unknown Source) 
    at package.comport.GioComport.findDevice(Unknown Source) 
    at package.comport.GioComport.&lt;init&gt;(Unknown Source) 
    at package.comport.ComportFactory.createNewPort(Unknown Source) 
    at package.comport.ComportFactory.createComport(Unknown Source) 
    at package.comport.test.buildservertests.ComportFactoryTest.testCreateDefaultComport(Unknown Source) 
</error> 
    </testcase> 
    <testcase classname="nl.timo.comport.test.buildservertests.ComportFactoryTest" name="testCreateComportWithWrongSettings" time="0.0"> 
    <error message="giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String;" type="java.lang.UnsatisfiedLinkError">java.lang.UnsatisfiedLinkError: giovynet.nativelink.SerialPort.getStateSerialPortC(Ljava/lang/String;)Ljava/lang/String; 
    at giovynet.nativelink.SerialPort.getStateSerialPortC(Native Method) 
    at giovynet.nativelink.SerialPort.getFreeSerialPort(SerialPort.java:50) 
    at package.comport.GioComport.getFreeSerialPorts(Unknown Source) 
    at package.comport.GioComport.findDevice(Unknown Source) 
    at package.comport.GioComport.&lt;init&gt;(Unknown Source) 
    at package.comport.ComportFactory.createNewPort(Unknown Source) 
    at package.comport.ComportFactory.createComport(Unknown Source) 
    at package.comport.test.buildservertests.ComportFactoryTest.testCreateComportWithWrongSettings(Unknown Source) 
</error> 
    </testcase> 
    <system-out><![CDATA[]]></system-out> 
    <system-err><![CDATA[java.lang.UnsatisfiedLinkError: no libSerialPort in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738) 

उत्तर

13

junit task in Ant, सिस्टम गुण स्थापित करने के लिए, बस अन्य कार्यों में से कुछ की तरह अनुमति देते हैं। आप के रूप में sysproperty नेस्टेड तत्व में java.library.path मूल्य का उल्लेख करना होगा:

<junit fork="yes" printsummary="yes" haltonfailure="yes"> 
    <test name="${test.class.name}" todir="${test.reports}" /> 
    <formatter type="xml" /> 
    <classpath refid="test.classpath" /> 
    <sysproperty key="java.library.path" value="put your library path here"/> 
</junit> 
+0

उत्तर के लिए धन्यवाद! यह पथ को बदल देता है, है ना? मैं ** ** मेरी निर्देशिका को पथ में कैसे जोड़ सकता हूं (पथ = पथ + नया डीआईआर;)) – Timo

+0

@ टिमो, आपको [pathconvert] (http://ant.apache.org/manual/Tasks/pathconvert मिल सकता है) .html) कार्य उस उद्देश्य के लिए उपयोगी होना चाहिए। [यह SO सवाल] देखें (http://stackoverflow.com/questions/2140637/how-do-i-build-a-list-of-file-names), साथ ही साथ। –

+4

' 'क्या यह भी काम करेगा? – Timo

5

पुस्तकालय लोड पथ सेट करने के लिए एक jvmarg का उपयोग करें:

<junit> 
    <jvmarg value="-Djava.library.path=/blah/YOURPATH"/> 

यदि आप अपनी निर्देशिका को मौजूदा पथ में जोड़ना चाहते हैं, तो आपकोका उपयोग करना होगा:

<property environment="env"/> 
<junit> 
    <jvmarg value="-Djava.library.path=${env.path}${path.separator}/blah/PATH"/> 
+0

जवाब के लिए धन्यवाद! यह पथ को बदल देता है, है ना? मैं ** ** मेरी निर्देशिका को पथ में कैसे जोड़ सकता हूं (पथ = पथ + नया डीआईआर;)) – Timo

+0

धीमी प्रतिक्रिया के लिए खेद है। यदि आपको अभी तक यह नहीं मिला है तो मैंने इसे –

+0

के उत्तर में जोड़ा है यह ध्यान दिया जाना चाहिए कि इस समाधान के लिए विशेषता फोर्क = "हाँ" आवश्यक है! –

संबंधित मुद्दे