私が見つけたものは、この特定のケースを解決するのを助けることができませんでした。最近、普通の古いJava Webアプリプロジェクト(機能していた)からMaven Webプロジェクトに切り替えました。次のランタイム例外が発生します。
Java.util.MissingResourceException: Can't find bundle for base name com.myapp.config, locale en
Netbeansを使用して、JSF 2.0、Spring、およびHibernate Webアプリを作成しています。次のディレクトリ構造があります。
src\main\Java\com\myapp config.propertiesが含まれています
src\main\resources空
target\myapp\WEB-INF\classes\com\myapp config.propertiesのないコンパイル済みクラスファイルが含まれています
src\main\Java\com\myapp config.propertiesが含まれています
ターゲットフォルダー内のWARファイルを検査しても、プロパティファイルの兆候は見られないため、Mavenビルドプラグインがプロパティファイルをコピーしていないかのように見えます。 pom内に配置できるタグがあることは知っていますが、うまくいきませんでした。以下のリンクは、resourcesフォルダー(私にとっては空)の内容がビルド中に含まれていることを述べていますが、その場合、Netbeansからどのように実行しますか?プロパティファイルをwarと共にパッケージ化して、サーバーにデプロイしたときにアクセスできるようにするだけです。
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>
プロジェクトのビルドパスはNetbeansになるように構成されていますか? src/main/webapp/WEB-INF/classes
に変更してみてください。これにより、src/main/Java
フォルダーからコンパイルしたクラスファイルと、src/main/resources
の下にあるリソースが、生成されたWARに含まれるようになります。 src/main/resources
フォルダーの下に配置すると、config.propertiesファイルにアクセスできるようになります。
また、pom.xmlのincludes
セクションを確認し、誤って何かを除外していないことを確認することもできます(明示的に一部を含めた場合、他のすべてを暗黙的に除外している可能性があります)。
MavenはデフォルトでJavaソースツリーからリソースをコピーしませんが、これをpom.xmlに追加することで取得できます。
<build>
<resources>
<resource>
<directory>src/main/Java</directory>
<excludes><exclude>**/*.Java</exclude></excludes>
</resource>
</resources>
</build>
Javaソースファイルを除外していることを確認してください。
から http://www.ninthavenue.com.au/how-to-change-mavens-default-resource-folder から
Config.propertiesをsrc\main\resources\com\myappの下に配置してみてください。これをローカルプロジェクトでテストすることができました。 Maven 3.0.2を実行しています。
Webappアーキタイプを使用してmvnサンプルプロジェクトを作成しました。
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
Src/main/resources/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
あなたはあなたのマシンでそれらのステップを試すかもしれません。それが機能する場合は、POMから何かを削除してPOMを簡素化し、機能するかどうかを確認します。試行錯誤は面白くありませんが、私はそれを破るはずの上の何かを見ていません。
デフォルトでは、mavenはリソースフォルダーの下のすべてのファイルを含みます。プロパティファイルがリソースフォルダーにない場合は、ビルドセクションの下のpom.xmlファイルに以下を含める必要があります。
<build>
/* other tags like <plugins> goes here */
<sourceDirectory>src/main/Java</sourceDirectory>
<resources>
<resource>
<directory>src/main/Java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
/* other tags like <plugins> goes here */
</build>