Почему maven не копирует файлы свойств во время процесса сборки?

ничего, что я нашел, не смог помочь мне решить этот конкретный случай. Недавно я переключился с простого старого проекта java web app (который работал) на веб-проект maven. Я получаю следующее исключение во время выполнения:

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

Я использую Netbeans для создания веб-приложения JSF 2.0, Spring и Hibernate. У меня есть следующая структура каталогов:

srcmainjavacommyapp содержит конфигурацию.свойства
srcосновные ресурсы               Пусто

targetmyappWEB-INFclassescommyapp содержит скомпилированные файлы классов без конфигурации.свойства
srcmainjavacommyapp содержит конфигурацию.свойства

проверка файла WAR в целевой папке не показывает никаких признаков файла свойств, поэтому это похоже на то, что плагин Maven build не копирует файлы свойств. Я знаю, что есть тег, который вы можете поместить внутри pom, но это у меня не получилось. В приведенной ниже ссылке упоминается, что папка ресурсов (пустая для меня) имеет свое содержимое во время сборки, но если это так, как вы это делаете из Netbeans? Я просто хочу, чтобы файл свойств был упакован с моей войной, чтобы он был доступен при развертывании на сервере.

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

пом.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>

3 ответов


каков путь сборки вашего проекта, настроенный на Netbeans? Вы можете попробовать изменить его на src/main/webapp/WEB-INF/classes. Таким образом, файлы классов, скомпилированные из вашего src/main/java папка и любые ресурсы, которые у вас есть в src/main/resources должен быть включен в сгенерированную войну. Затем вы сможете получить доступ к своей конфигурации.файл свойств, если вы поместите его под .

вы также можете просмотреть любой includes разделы в вашем pom.xml и убедитесь, что вы случайно не исключаете что-то (если вы явно включаете некоторые вещи,вы, вероятно, неявно исключаете все остальное).


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


попробуйте поставить свою конфигурацию.свойства в разделе src\main\resources\com\myapp. Я смог протестировать это на местном проекте. Я запускаю Maven 3.0.2.

создал образец проекта mvn с архетипом webapp:

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

создал каталог в src / main/resources/com / foo и поставил foo.файл свойства.

запустил сборку:

mvn clean install

затем, при поиске в результирующем целевом каталоге, foo.файл свойств появляется:

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

вы можете попробовать эти шаги на ваш машина. Если это работает, начните пытаться упростить свой POM выше, удалив из него вещи, чтобы увидеть, начинает ли он работать. Проб и ошибок не весело, но я просто не вижу ничего выше, что должно нарушать его.