我不确定最好的标题是什么,所以如果有人有更好的建议,请离开。
我不确定应该提供哪些信息,所以我会告诉您发生了什么。
我有一些单元测试在 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 正确复制这些文件?
最佳答案
考虑到该文件是DTD(而不是Java资源),我认为最好将其放在默认maven项目的resources/META-INF文件夹中。
默认情况下,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
关于java - DTD 显示在 Eclipse 中的项目目标路径中,但通过 Maven 命令行使用时不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232076/