2011-04-03 26 views
14

Bulunduğum hiçbir şey bu özel durumu çözmeme yardımcı oldu. Geçenlerde bir maven web projesine (eski) çalışan bir eski java web uygulaması projesinden geçtim. Ben bir JSF 2.0, Bahar ve Hazırda web uygulaması oluşturmak için NetBeans kullanıyorumNeden maven, özellik dosyalarını oluşturma işlemi sırasında kopyalamaz?

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

: Aşağıdaki çalışma zamanı özel olsun. Aşağıdaki dizin yapısı vardır: Ana \ java \

src \ com Uygulamam \         config.properties İçeren ana \ kaynaklar                           \
src   Boş

target \ myapp \ WEB-INF \ classes \ com \ myapp         \ ana \ java src config.properties
olmadan sınıf dosyaları derlenmiş İçeriğinde \ com Uygulamam \                                                                 Maven inşa etmek eklenti özellikleri dosyalarını kopyaladıktan değil sanki yani dosya özelliklerinin herhangi bir işaret göstermez config.properties
hedef klasörde WAR dosyasının

Muayene içerir. Pomanın içine yerleştirebileceğin bir etiket olduğunu biliyorum ama benim için çalışmadı. Aşağıdaki bağlantı, kaynak klasörünün (benim için boş) içeriğin yapının içinde yer aldığını, ancak durum böyleyse, bunu Netbeans'ten nasıl yaptığınızı belirtir. Ben sadece özellikleri dosya benim savaş ile paketlenmiş olmasını istiyorum, böylece sunucuya dağıtıldığında erişilebilir.

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> 

cevap

11

Projenizin Netbeans'ta yapılandırılmış bir yapılandırma yolu nedir? src/main/webapp/WEB-INF/classes'a değiştirmeyi deneyebilirsiniz. Bu şekilde, src/main/java klasörünüzden derlenmiş sınıf dosyaları ve src/main/resources altında bulunan kaynakların oluşturulan WAR'ye dahil olması gerekir. Daha sonra src/main/resources klasörünün altına yerleştirirseniz config.properties dosyanıza erişebilirsiniz.

Ayrıca, pom.xml sayfanızdaki herhangi bir includes bölümünü gözden geçirebilir ve bir şeyleri yanlışlıkla dışlamadığınızdan emin olabilirsiniz (eğer bazı şeyleri açıkça dahil ederseniz, muhtemelen herşeyi örtük olarak hariç bırakabilirsiniz).

+0

Yukarıda pom.xml ekledim. Sınıf yolu etiketi düzenlemem gereken şey olabilir. Yukarıda bahsedildiği gibi, eğer orada hareket edersem, netbeans'te görünmeyeceği için, kaynaklar klasörüne bir şeyler koymak istemiyorum. – Nicholas22j

+0

Netbeans, kaynak dosyalarında özellik dosyalarını barındırabilmeli. Http://netbeans.org/community/magazine/html/04/maven.html adresinde, kaynaklar hakkında konuşulduğu yerlerin yaklaşık yarısına inin (ya da sadece kaynaklar için sayfayı arayın ve bu konuda söylenecekleri okuyun). – squawknull

+2

Bence netbeans makalesi bana doğru yönde işaret etti. Netbeans proje sekmesinde "Diğer Kaynaklar" adlı bir klasör var. Aynı olmayan paket yapısı altında "Diğer Kaynaklar"> "src/main/resources" için sınıf dışı dosyalar (.properties dosyaları gibi) eklemeniz gerekir. Basit bir şey olması gerektiğini biliyordum!Buna ne kadar zaman harcadığımı söyleyemem. Çok teşekkür ederim @squawknull! Harikasın. – Nicholas22j

0

Uygulamam \ ana \ kaynaklar \ com \ src altında config.properties koyarak deneyin. Bunu yerel bir projede test edebildim. Maven 3.0.2'yi çalıştırıyorum.

Webapp arketip ile bir mvn örnek proje oluşturuldu

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

src/main/resources/com/foo bir dizin ve altındaki bir foo.properties dosyasını koymak düzenlendi.Ortaya çıkan hedef dizinde ararken

mvn clean install 

Ardından, foo.properties dosya görünür:

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

Sen makinenizde bu adımları deneyebilirsiniz

bir yapı Ran. Bu işe yararsa, çalışmaya başladıktan sonra, POM'unuzu yukarıdaki şeyleri kaldırarak basitleştirmeye çalışın. Deneme ve hata eğlencelidir, ama yukarıda bir şey görmüyorum ki kırılmalı.

+0

itibaren ben bunu denedim ve hala aynı durum verir. Dikkat edilmesi gereken bir şey var: src \ main \ webapp, inplace dağıtımı için hedef direk üzerine kopyalanan şeydir. Webapp klasörü sadece web sayfası altındaki facelet sayfalarını ve xml config dosyalarını içerir. Özellik dosyası yok. Config.properties'i kaynak klasörüne kopyalamak işe yaramadıysa bile, bunu Netbeans projesinde görüntüleyemiyorum. Başka fikirlerin var mı? – Nicholas22j

+0

Hrmm, bunu yerel olarak denedim ve özellikler dosyası kopyalandı ... Pom.xml'in içeriğini yukarıdaki soruya ekleyebilir misiniz? Netbeans'in dışında bir yapıyı "mvn clean install" kullanarak çalıştırmayı deneyebilir ve oluşturulan savaş dosyasının içindeki WEB-INF dizininde görünüp görünmediğine bakabilirsiniz. – squawknull

+0

Elle komut satırında çalıştırdım ve IDE'deyken de aynı sonuçları üretti. İnşa her zaman başarılıdır. Görünümdeki EL, # {config ['propertyKey']} çözümünü çözmeye çalıştığında ve MissingResourceException öğesini atarken ortaya çıkar. Savaşta herhangi bir yapılandırma dosyası yok. Maven'e geçerken, bu problem normal bir java web projesi olarak değil, gariptir. Bağımlılık kabuslarından kaçınmak için mavna geçtim. – Nicholas22j

36

Maven varsayılan olarak java kaynak ağacından kaynak kopyalamaz, ancak bunu sizin pom.xml bu ekleyerek bunu elde edebilirsiniz:

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

java kaynak dosyalarını dışlamak emin olun.

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

+2

çalışmak için paket adının başında ResourceBundle.getBundle (packageName + "mybundle") olarak paket adını eklemeliydim. Bu anlamlı cevap sorunumu çözdü. – ZuzEL

+0

O kadardı, teşekkürler :) –

+0

Bir açıklama için teşekkürler :) – Zbyszek

İlgili konular