我正在尝试使用maven构建一个jar,这个jar是使用ant构建的。
当我从maven运行测试时,我得到了:
ERROR org.hibernate.tool.hbm2ddl.SchemaValidator could not complete schema validation
org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'net.sourceforge.jtds.jdbc.Driver'
来自:
Caused by: java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
当我构建jar而不运行测试时,它是构建的,但它缺少一些.class和.properties文件,所以这个jar没有按预期运行。
为了更简洁,我的jar中缺少应该来自/ test文件夹的编译文件。
可能是我的pom.xml中添加了一些错误的依赖项?
答案 0 :(得分:1)
我得到了一个(...)
java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver
您很可能错过了jTDS依赖项。你在pom.xml
中声明了它吗?
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
</dependency>
使用适合您的任何版本(也可能调整范围)。
为了更简洁,我的jar中缺少应该来自/ test folder
的编译文件
这不会发生,也不应该发生,测试源和资源不会被Maven包装在最终的jar中,这是一件好事。如果这些文件应该打包在最终的jar中,请将它们的源移动到源树(而不是测试树)。
答案 1 :(得分:0)
可能是我的pom.xml中添加了一些错误的依赖项?
可以。你肯定应该在那里声明一个JTDS依赖项,如果你还没有。
至于缺少的课程,您是否期望{J}中有net.sourceforge.jtds.jdbc.Driver
?如果是这样,你就错了,这应该是你单独获得的JTDS JAR。
在任何情况下,您都可以将测试步骤排除在等式之外。从干净的目录开始,然后运行mvn compile
。然后查看target/classes
目录以查看在那里编译了哪些类。如果在此步骤中缺少类,则Maven不会找到它们。它们是否在src/main/java
文件夹中(或target/generated-sources
用于生成的类)?你的pom是否覆盖了编译阶段的默认模式匹配?
你还没有真正提供太多信息,所以我不能只说一步一步完成这个过程,看看每一步的结果。通常人们最初会关注错误的区域,并且只需要简单的注意力转移就可以找到回想起来的问题。