DTD отображаются в целевом пути проекта в Eclipse, но не при использовании через командную строку Maven - PullRequest
0 голосов
/ 13 июля 2010

Я не был уверен, какое название лучше, так что если у кого-то есть лучшее предложение, стреляйте.

Я не уверен, какую информацию я должен предоставить, поэтому я скажу вам, чтопроисходит.

У меня есть несколько модульных тестов, которые в Eclipse проходят нормально.В этих тестах есть некоторый XML-код, который проверяется на соответствие специально построенному DTD (слегка модифицированный Apelon DTS DTSConcept, если кто-то знаком).В eclipse, когда я запускаю эти тесты, я вижу в своем целевом пути для проекта, что отображаются dtds.

Итак, dir1 / dir2 / dtds / myDtd.dtd существует в целевом пути проекта.

Однако, если я запускаю модульные тесты в командной строке с помощью maven (mvn clean test), эти тесты не пройдены из-за исключения MalformedURLException.Мне удалось избавиться от проверки DTD и пройти тесты, поэтому я знал, что это как-то связано с этим.После многих попыток, по какой-то причине я посмотрел на целевой путь проекта.Теперь dir1 / dir2 / dtds / myDtd.dtd не существует.Кажется, именно поэтому я получаю исключение - файл не существует.

Я понимаю, что это может быть слишком расплывчато, но есть ли что-нибудь, что вы можете подумать, почему у меня могут быть эти разныерезультаты в Eclipse по сравнению с использованием командной строки Maven?

Я предоставлю больше информации по запросу, но я не был уверен, что именно включить.

Спасибо за любую помощь.

EDIT: Хорошо, похоже, проблема в том, что maven просто не копирует DTD в целевой каталог при сборке.Я могу в Google / задать отдельный вопрос для этого, но как мне обеспечить, чтобы Maven правильно копировал эти файлы?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Учитывая, что файл является DTD (а не ресурсом Java), я думаю, что было бы лучше поместить его в папку resources / META-INF проекта maven по умолчанию.

По умолчанию maven копирует все файлы из ресурсов в целевое место назначения на этапе ресурсов процесса, чтобы вы могли избавиться от дополнительной настройки плагина.

Также потребуется изменить файл XML, чтобы он указывал на новое местоположение.

Вот как это будет выглядеть в типичной структуре проекта Maven:

my-app
|-- pom.xml
`-- src
    |-- main
    |   |-- java
    |   |   `-- com
    |   |       `-- mycompany
    |   |           `-- app
    |   |               `-- App.java
    |   `-- resources
    |       `-- META-INF
    |           `-- application.properties
    [            -- myDtd.dtd
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java
0 голосов
/ 13 июля 2010

Ну, я понял это :) В случае, если кто-то сталкивается с подобной проблемой и не может понять плагин изначально (как я), вот что сработало для меня:

<plugin>
            <!-- Necessary for maven to copy the DTDs to the correct directory. -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <!-- here the phase you need -->
                    <phase>compile</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/classes/com/work/hin/dts/dtd/query</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/java/com/work/hin/dts/dtd/query</directory>
                                <includes>
                                    <include>**/*.dtd</include>
                                </includes>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
...