Почему maven не копирует файлы свойств в процессе сборки? - PullRequest
16 голосов
/ 03 апреля 2011

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

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

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

src \ main \ java \ com \ myapp Содержит config.propertiessrc \ main \ resources Пустоtarget \ myapp \ WEB-INF \ classes \ com \ myapp Содержит скомпилированные файлы классов без config.propertiessrc \ main \ java \ com \ myapp Содержит config.properties

Проверка файла WAR в целевой папке не показывает никаких признаков файла свойств, так что плагин сборки Maven не копирует файлы свойств.Я знаю, что есть тег, который вы можете поместить в помпе, но он не сработал для меня.Ссылка ниже упоминает, что в папке ресурсов (пусто для меня) есть содержимое, включенное во время сборки, но если это так, как вы делаете это из 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 ]

36 голосов
/ 30 августа 2012

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

12 голосов
/ 03 апреля 2011

Какой путь сборки вашего проекта настроен для использования в Netbeans?Вы можете попробовать изменить его на src/main/webapp/WEB-INF/classes.Таким образом, файлы классов, скомпилированные из вашей папки src/main/java и любых ресурсов, находящихся под src/main/resources, должны быть включены в сгенерированную WAR.После этого вы сможете получить доступ к файлу config.properties, если поместите его в папку src/main/resources.

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

0 голосов
/ 18 июня 2019

По умолчанию 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>
0 голосов
/ 03 апреля 2011

Попробуйте поместить свои config.properties в 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.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 выше, удалив из него что-то, чтобы посмотреть, начнет ли оно работать. Метод проб и ошибок неинтересен, но я просто не вижу ничего, что могло бы его сломать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...