example maven java-ee-6 resourcebundle

maven - resourcebundle java example



¿Por qué maven no copia los archivos de propiedades durante el proceso de construcción? (3)

Nada de lo que he encontrado ha podido ayudarme a resolver este caso específico. Recientemente cambié de un proyecto de aplicación web Java simple (que estaba funcionando) a un proyecto web experto. Obtengo la siguiente excepción de tiempo de ejecución:

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

Estoy utilizando Netbeans para crear una aplicación web JSF 2.0, Spring e Hibernate. Tengo la siguiente estructura de directorios:

src / main / java / com / myapp Contiene config.properties
src / main / resources Vacío

target / myapp / WEB-INF / classes / com / myapp Contiene archivos de clase compilados sin config.properties
src / main / java / com / myapp Contiene config.properties

La inspección del archivo WAR en la carpeta de destino no muestra ningún signo del archivo de propiedades, por lo que parece que el complemento de compilación de Maven no está copiando los archivos de propiedades. Sé que hay una etiqueta que puedes colocar dentro del pom pero no funcionó para mí. El siguiente enlace menciona que la carpeta de recursos (vacía para mí) tiene su contenido incluido durante la compilación, pero si ese es el caso, ¿cómo lo hace desde Netbeans? Solo quiero que el archivo de propiedades esté empaquetado con mi guerra para que esté accesible cuando se implementa en el servidor.

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>


¿Cuál es la ruta de compilación de su proyecto configurada para estar en Netbeans? Puede intentar cambiarlo a src/main/webapp/WEB-INF/classes . De esta manera, los archivos de clase compilados desde su carpeta src/main/java y cualquier recurso que tenga bajo src/main/resources deben incluirse en el WAR generado. Entonces podrá acceder a su archivo config.properties si lo coloca en la carpeta src/main/resources .

También puede revisar cualquier sección de inclusión en su pom.xml y asegurarse de que no esté excluyendo algo accidentalmente (si incluye algunas cosas explícitamente, probablemente esté excluyendo implícitamente todo lo demás).


Intente poner su config.properties bajo src / main / resources / com / myapp. Pude probar esto en un proyecto local. Estoy corriendo Maven 3.0.2.

Creé un proyecto de ejemplo mvn con el arquetipo de aplicación web:

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

Creé un directorio en src / main / resources / com / foo y puse un archivo foo.properties debajo de él.

Ejecutó una compilación:

mvn clean install

Luego, al buscar en el directorio de destino resultante, aparece el archivo 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

Podrías probar esos pasos en tu máquina. Si eso funciona, entonces intente simplificar su POM anterior eliminando cosas de ella para ver si comienza a funcionar. La prueba y el error no son divertidos, pero simplemente no veo nada arriba que deba estar rompiéndolo.


Maven no copia los recursos del árbol de código fuente de Java de forma predeterminada, pero puede hacerlo si lo agrega a su pom.xml:

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

Asegúrate de excluir los archivos fuente de java.

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