2011-02-09 15 views
24

मेरे यूनिट परीक्षणों में मैं $ {project.build.directory} के अंदर एक tmp निर्देशिका बनाना चाहता हूं। मैं अपने यूनिट परीक्षण के अंदर $ {project.build.directory} के मूल्य तक कैसे पहुंच सकता हूं?

एक तरीका, जिसे मैं सोच सकता था, परीक्षण संसाधनों में फ़िल्टर की गई संपत्ति फ़ाइल प्रदान करना है, जो उस मान को धारण करता है। (मैंने अभी तक कोशिश नहीं की है, लेकिन मुझे लगता है कि काम करना चाहिए।)

क्या इस संपत्ति मूल्य को एक्सेस/पास करने का कोई सीधा तरीका है?

सादर, फ्लोरियन

+0

शायद हम सिस्टम प्रॉपर्टी सेट करने के लिए कॉन्फ़िगर कर सकते हैं, लेकिन किसी भी तरह से मुझे सिस्टम गुणों के माध्यम से चीजें पास करने का विचार पसंद नहीं है। दूसरी तरफ, आप कह सकते हैं कि यह कुछ पर्यावरण विशिष्ट है (कम से कम पूर्ण पथ)। तुम क्या सोचते हो? – Puce

उत्तर

5

याद रखें, जो आपके इकाई परीक्षण की जरूरत नहीं है Maven अचूक प्लगइन से निष्पादित किया जाना है, इसलिए ${project.build.directory} संपत्ति उपलब्ध नहीं हो सकता। अपने परीक्षणों को और अधिक पोर्टेबल बनाने के लिए मैं File.createTempFile() का उपयोग करने की सलाह दूंगा।

+2

वैसे, वास्तव में, हम वर्तमान में यही करते हैं और मैं इसे बदलना चाहता हूं। हमें एक मुद्दा था कि जब तक हम डिस्क स्पेस से बाहर नहीं निकले, तब तक हडसन पर टीएमपी निर्देशिका भर गई। हम कई विकल्पों की जांच कर रहे हैं, एक लक्ष्य निर्देशिका के अंदर एक tmp निर्देशिका को file.createTempFile() के तर्क के रूप में पास करना है। इस तरह, "एमवीएन क्लीन" सब कुछ साफ करेगा। – Puce

+0

इसके अलावा, चूंकि यह एक मेवेन प्रोजेक्ट है, मुझे लगता है कि परीक्षण केवल मेवेन या आईडीई का उपयोग करके चलेंगे जो मेवेन (यहां: ग्रहण) का समर्थन करता है। – Puce

12

मुझे लगता है कि सिस्टम गुणों का उपयोग करना काफी सरल है यदि आप निश्चित रूप से http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html समझाए गए निश्चित फ़ायरफ़ॉक्स को कॉन्फ़िगर करते हैं। यहां तक ​​कि उदाहरण भी आपके प्रश्न का उत्तर दे रहा है:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.9</version> 
     <configuration> 
      <systemPropertyVariables> 
      <propertyName>propertyValue</propertyName> 
      <buildDirectory>${project.build.directory}</buildDirectory> 
      [...] 
      </systemPropertyVariables> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 
14

मैंने पहले कुछ सफलता के साथ ऐसा कुछ उपयोग किया है। मैवेन का उपयोग न करने पर भी यूनिट टेस्ट चलाया जाएगा, लक्ष्य निर्देशिका अभी भी जहां भी परीक्षण चल रहे हैं, के सीडब्ल्यूडी के सापेक्ष दो डीआईआरएस बनाए जाएंगे।

public File targetDir(){ 
    String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile(); 
    File targetDir = new File(relPath+"../../target"); 
    if(!targetDir.exists()) { 
    targetDir.mkdir(); 
    } 
    return targetDir; 
} 
+1

महान जो मेरे लिए मेवेन और ग्रहण में काम करता है। –

+0

चर्चा के लिए थोड़ा देर हो चुकी है लेकिन '' /../../ target' के साथ लक्षित करने के लिए आपको निश्चित रूप से 'relpath'' 'स्रोत/मुख्य/जावा 'नहीं है? – Adam

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