0

我不确定最好的标题是什么,所以如果有人有更好的建议,请开火。

我不确定我应该提供什么信息,所以我会告诉你发生了什么。

我有一些在 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 命令行吗?

我会按要求提供更多信息,但我不确定具体包括什么。

感谢您的任何帮助。

编辑:好的,问题似乎在于 Maven 在构建时根本不会将 DTD 复制到目标目录。我可能会为此谷歌/问一个单独的问题,但我将如何确保 Maven 正确复制这些文件?

4

2 回答 2

2

考虑到该文件是 DTD(不是 Java 资源),我认为将其放在默认 maven 项目的 resources/META-INF 文件夹中会更好。

默认情况下,maven 在 process-resources 阶段将资源下的所有文件复制到目标目标,因此您可以摆脱额外的插件配置。

它还需要修改您的 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
于 2010-07-12T22:48:19.710 回答
0

好吧,我想通了 :) 如果有人遇到类似的问题并且最初无法弄清楚插件(像我一样),这对我有用:

<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>
于 2010-07-12T22:24:43.920 回答