18

この特定のケースを解決するのに役立つものは何も見つかりませんでした。私は最近、プレーンな古い 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 を含まないコンパイル済みクラス ファイルを
含むconfig.properties

ターゲット フォルダー内の WAR ファイルを調べても、プロパティ ファイルの痕跡は見られないため、Maven ビルド プラグインがプロパティ ファイルをコピーしていないように見えます。ポンポンの中に配置できるタグがあることは知っていますが、うまくいきませんでした。以下のリンクは、resources フォルダー (私にとっては空) の内容がビルド中に含まれていることを示していますが、その場合、Netbeans からどのように行うのですか? サーバーにデプロイされたときにアクセスできるように、プロパティファイルを戦争にパッケージ化するだけです。

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>

4

5 に答える 5

39

デフォルトでは、Maven は Java ソース ツリーからリソースをコピーしませんが、これを pom.xml に追加することでそれを行うことができます。

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

Java ソース ファイルを必ず除外してください。

https://rogerkeays.com/how-to-change-mavens-default-resource-folderから

于 2012-08-30T19:57:18.137 に答える
14

あなたのプロジェクトのビルド パスは Netbeans に設定されていますか? に変更してみてくださいsrc/main/webapp/WEB-INF/classes。このようにして、フォルダーからコンパイルされたクラスファイルsrc/main/javaと、その下にあるすべてのリソースがsrc/main/resources、生成された WAR に含まれる必要があります。src/main/resourcesフォルダーの下に配置すると、config.properties ファイルにアクセスできるようになります。

またincludes、pom.xml のセクションを確認して、誤って何かを除外していないことを確認することもできます (一部のものを明示的に含めると、他のすべてを暗黙的に除外する可能性があります)。

于 2011-04-03T02:37:46.527 に答える
0

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 を単純化して、機能するかどうかを確認してください。試行錯誤は楽しいものではありませんが、それを壊すべきものは何もありません.

于 2011-04-03T02:07:02.393 に答える