Файл jaxb.properties из пакета java, не включенного в Maven, построенный .war

Я помещаю файл jaxb.properties в пакет, где мои классы, где я использую другой поставщик JAXB (как видно из этой ссылки Задание EclipseLink MOXy как вашего JAXB Provider), который я использую для unmarshalling.

Выполняется следующее:

  • Когда я запускаю проект из Eclipse/STS, unmarshalling работает нормально, так как он читает файл jaxb.properties.

  • Когда я создаю проект с Maven 3 (mvn clean install), файл jaxb.properties не входит в пакет, поэтому эти классы не могут успешно отменить XML файлы. Затем я должен вручную поместить файл jaxb.properties, перейдя к развернутому приложению, введя пакет и вставив его в файл.

Решение? Спасибо!

Ответ 1

В src/main/resources вы должны поместить ресурсы (например, jaxb.properties).
Я пока не могу найти доказательств/документации, но я уверен, что maven будет компилировать и копировать файлы .java из папки src.

Из документации кажется ясным, что компиляция будет только компилировать и ничего не копировать. Поэтому будут обрабатываться только файлы java под src/main/java и все остальное игнорируется.

Ресурсы обрабатываются ресурсами: ресурсами, которые выполняются автоматически. Эта цель копирует ресурсы из src/main/resources.

Compile только компилирует файлы из папки src. Файлы ресурсов не являются java файлами и поэтому не будут скопированы/скомпилированы в выходной каталог.

Ответ 2

Как подсказывает намек, лучше всего использовать maven-resources-plugin, чтобы достичь этого.

        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${basedir}/target/classes/path/to/model/</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${basedir}/src/main/resources/</directory>
                                <includes>
                                    <include>jaxb.properties</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin> 

Поместите файл jaxb.properties в directory и укажите местоположение пакета (outputDirectory), и это скопирует ресурс до его упаковки.

Ответ 3

добавить в свой pom.xml

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/jaxb.properties</include>
            </includes>
        </resource>         
    </resources>