2011-04-03 10 views
14

मुझे जो कुछ भी मिला है, वह मुझे इस विशिष्ट मामले को हल करने में मदद करने में सक्षम नहीं है। मैंने हाल ही में एक मैवेन वेब प्रोजेक्ट में एक सादे पुराने जावा वेब ऐप प्रोजेक्ट (जो काम कर रहा था) से स्विच किया था।मैवेन बिल्ड प्रक्रिया के दौरान गुण फ़ाइलों की प्रतिलिपि क्यों नहीं करता है?

java.util.MissingResourceException: Can't find bundle for base name com.myapp.config, locale en 

मैं एक JSF 2.0, स्प्रिंग, और हाइबरनेट वेब अनुप्रयोग बनाने के लिए Netbeans उपयोग कर रहा हूँ: मैं निम्नलिखित क्रम अपवाद मिलता है। मैं निम्नलिखित निर्देशिका संरचना है:

src \ मुख्य \ जावा \ कॉम \ MyApp         config.properties शामिल
src \ मुख्य \ संसाधनों                             खाली

लक्ष्य \ myapp \ WEB-INF \ classes \ com \ myapp         config.properties
\ मुख्य \ जावा स्रोत के बिना वर्ग फ़ाइलों संकलित होता है \ कॉम \ MyApp                                                                 config.properties
लक्ष्य फ़ोल्डर में युद्ध फ़ाइल के

निरीक्षण शामिल गुण का कोई भी संकेत नहीं दिखाता है तो फाइल यह रूप में अगर Maven निर्माण प्लग में गुण फ़ाइलों की प्रतिलिपि नहीं है। मुझे पता है कि एक टैग है जिसे आप पोम के अंदर रख सकते हैं लेकिन यह मेरे लिए काम नहीं करता है। नीचे दिए गए लिंक का उल्लेख है कि संसाधन फ़ोल्डर (मेरे लिए खाली) में निर्माण के दौरान इसकी सामग्री शामिल है, लेकिन यदि ऐसा है, तो आप इसे नेटबीन्स से कैसे करते हैं? मैं चाहता हूं कि गुण फ़ाइल को मेरे युद्ध के साथ पैक किया जाए ताकि सर्वर पर तैनात होने पर यह पहुंच योग्य हो।

http://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.myapp</groupId> 
<artifactId>myapp</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>myapp</name> 
<url>http://maven.apache.org</url> 
<repositories> 
    <repository> 
     <id>java.net</id> 
     <name>Repository hosting the Java EE 6 artifacts</name> 
     <url>http://download.java.net/maven/2</url> 
    </repository> 
</repositories> 
<dependencies> 
    <dependency> 
     <groupId>javax.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-hibernate3</artifactId> 
     <version>2.0.8</version> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk</artifactId> 
     <version>1.1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>net.authorize</groupId> 
     <artifactId>java-anet-sdk</artifactId> 
     <version>1.4.2</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.15</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.2</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
    <finalName>${artifactId}</finalName> 
</build> 
<profiles> 
    <profile> 
     <id>endorsed</id> 
     <activation> 
      <property> 
       <name>sun.boot.class.path</name> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <!-- javaee6 contains upgrades of APIs contained within the JDK itself. 
          As such these need to be placed on the bootclasspath, rather than classpath of the 
          compiler. 
          If you don't make use of these new updated API, you can delete the profile. 
          On non-SUN jdk, you will need to create a similar profile for your jdk, with the similar property as sun.boot.class.path in Sun's JDK.--> 
         <compilerArguments> 
          <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}</bootclasspath> 
         </compilerArguments> 
        </configuration> 
        <dependencies> 
         <dependency> 
          <groupId>javax</groupId> 
          <artifactId>javaee-endorsed-api</artifactId> 
          <version>6.0</version> 
         </dependency> 
        </dependencies> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 
<properties> 
    <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server> 
</properties> 

उत्तर

11

नेटबींस में आपके प्रोजेक्ट का निर्माण पथ कॉन्फ़िगर किया गया है? आप इसे src/main/webapp/WEB-INF/classes पर बदलने का प्रयास कर सकते हैं। इस प्रकार कक्षा 0 आपके src/main/java फ़ोल्डर से संकलित की गई है और आपके पास src/main/resources के तहत मौजूद किसी भी संसाधन को जेनरेट किए गए WAR में शामिल किया जाना चाहिए। यदि आप इसे src/main/resources फ़ोल्डर के अंतर्गत रखते हैं तो आप अपनी config.properties फ़ाइल तक पहुंच पाएंगे।

आप अपने pom.xml में किसी भी includes अनुभागों की समीक्षा भी कर सकते हैं और सुनिश्चित कर सकते हैं कि आप कुछ गलती से कुछ नहीं छोड़ रहे हैं (यदि आप कुछ चीजों को स्पष्ट रूप से शामिल करते हैं, तो आप निश्चित रूप से अन्य सभी को छोड़कर देख सकते हैं)।

+0

मैंने ऊपर pom.xml संलग्न किया। क्लासपाथ टैग हो सकता है जो मुझे संपादित करने की आवश्यकता है। जैसा ऊपर बताया गया है, मैं संसाधन फ़ोल्डर में सामान नहीं रखना चाहता क्योंकि यह नेटबीन में दिखाई नहीं देगा यदि मैं इसे वहां ले जाता हूं। – Nicholas22j

+0

नेटबीन्स संसाधन निर्देशिका में गुण फ़ाइलों को संभालने में सक्षम होना चाहिए। Http://netbeans.org/community/magazine/html/04/maven.html देखें, लगभग आधा रास्ते जहां यह संसाधनों के बारे में बात करता है (या केवल संसाधनों के लिए पृष्ठ खोजें और इसे इसके बारे में क्या कहना है) पढ़ें। – squawknull

+2

मुझे लगता है कि नेटबीन्स लेख ने मुझे सही दिशा में इंगित किया है। Netbeans प्रोजेक्ट टैब में "अन्य स्रोत" नामक एक फ़ोल्डर है। आपको वांछित पैकेज संरचना के तहत गैर-वर्ग फ़ाइलों (जैसे .properties फ़ाइलों) को "अन्य स्रोत"> "src/main/resource" में जोड़ना होगा। मुझे पता था कि यह कुछ आसान होना था!मैं आपको नहीं बता सकता कि मैंने इस पर कितना समय बिताया। बहुत बहुत धन्यवाद @ squawknull! आपने धमाल मचाया। – Nicholas22j

0

\ MyApp \ मुख्य \ संसाधन \ कॉम src के तहत अपने config.properties डालने की कोशिश करो। मैं इसे स्थानीय परियोजना पर परीक्षण करने में सक्षम था। मैं मैवेन 3.0.2 चला रहा हूँ।

webapp मूलरूप आदर्श के साथ एक mvn नमूना परियोजना निर्मित:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp 

बनाया src/मुख्य/संसाधन/com/foo पर एक निर्देशिका और इसके नीचे एक foo.properties फ़ाइल डाल दिया।

mvn clean install 

तब, जब जिसके परिणामस्वरूप लक्ष्य निर्देशिका में देख, foo.properties फ़ाइल प्रकट होता है::

ls -al target/my-webapp/WEB-INF/classes/com/foo/ 
-rw-r--r-- 1 sblaes staff 4 Apr 2 22:09 foo.properties 

आप आपकी मशीन पर उन कदमों की कोशिश कर सकते

निर्माण Ran। यदि यह काम करता है, तो यह देखने के लिए कि क्या यह काम करना शुरू कर देता है, उससे चीजों को हटाकर उपरोक्त अपने पीओएम को सरल बनाने की कोशिश करना शुरू करें। परीक्षण और त्रुटि कोई मजेदार नहीं है, लेकिन मुझे बस कुछ भी नहीं दिख रहा है जो इसे तोड़ना चाहिए।

+0

मैंने कोशिश की और अभी भी एक ही अपवाद देता है। यह ध्यान रखना दिलचस्प है कि src \ main \ webapp क्या है इनस्थापन परिनियोजन के लिए लक्षित डीआईआर पर कॉपी किया जा रहा है। वेबपैप फ़ोल्डर में केवल वेब-इंफ के तहत फेसलेट पेज और एक्सएमएल कॉन्फ़िगरेशन फ़ाइलें शामिल हैं। कोई गुण फ़ाइल नहीं है। भले ही संसाधन फ़ोल्डर में config.properties की प्रतिलिपि बनाना काम करता है, मैं अब नेटबीन्स प्रोजेक्ट में इसे देखने में सक्षम नहीं हूं। कोई अन्य विचार? – Nicholas22j

+0

हरम, मैंने अभी स्थानीय रूप से कोशिश की है और गुण फ़ाइल की प्रतिलिपि बनाई गई है ... क्या आप उपरोक्त प्रश्न में अपने pom.xml की सामग्री जोड़ सकते हैं? क्या आप "एमवीएन क्लीन इंस्टॉल" का उपयोग कर नेटबीन्स के बाहर एक बिल्ड चलाने का प्रयास कर सकते हैं और देख सकते हैं कि यह वेब फ़ाइल के अंदर वेब-आईएनएफ निर्देशिका में दिखाया गया है या नहीं? – squawknull

+0

मैंने इसे कमांड लाइन पर मैन्युअल रूप से चलाया और यह उसी परिणाम का उत्पादन किया जब मैं आईडीई में हूं। बिल्ड हमेशा सफल होता है। यह तब होता है जब दृश्य में ईएल # {config ['propertyKey']} को हल करने का प्रयास करता है और MissingResourceException फेंकता है। युद्ध में कोई भी कॉन्फ़िगरेशन फाइल नहीं है। यह अजीब बात है कि जब मैवेन में स्विच करते हैं, तो यह समस्या होती है लेकिन सामान्य जावा वेब प्रोजेक्ट के रूप में नहीं होती है। मैं निर्भरता दुःस्वप्न से बचने के लिए मैवेन में स्विच किया। – Nicholas22j

36

Maven डिफ़ॉल्ट रूप से जावा स्रोत पेड़ से संसाधनों की नकल नहीं है, लेकिन आप यह कर कि अपने pom.xml को यह जोड़कर प्राप्त कर सकते हैं:

<build> 
    <resources> 
    <resource> 
     <directory>src/main/java</directory> 
     <excludes><exclude>**/*.java</exclude></excludes> 
    </resource> 
    </resources> 
</build> 

सुनिश्चित करें कि आप जावा स्रोत फ़ाइलों को बाहर करें।

http://www.ninthavenue.com.au/how-to-change-mavens-default-resource-folder

+2

काम करने के लिए मुझे संसाधन Bundle.getBundle (packageName + "mybundle") के रूप में बंडल नाम की शुरुआत में पैकेज नाम जोड़ना पड़ा। इस सार्थक उत्तर ने मेरी समस्या हल की। – ZuzEL

+0

वह था, धन्यवाद :) –

+0

एक स्पष्टीकरण के लिए धन्यवाद :) – Zbyszek

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