我使用mvn jetty运行我的应用程序:运行
在编译时一切都很好,我的行
Tidy tidier = new Tidy();
tidier.setInputEncoding("UTF-8");
编译好,类路径显示适当的jar。但是,在运行时我得到以下异常,我无法理解为什么:
2009-11-11 17:48:53.384::WARN: Error starting handlers
java.lang.NoSuchMethodError: org.w3c.tidy.Tidy.setInputEncoding(Ljava/lang/String;)V
我现在想也许在我的类路径中有两个不同版本的这个Tidy(一个显然不是名字整齐,否则我可以在maven所示的类路径中检测到它)。我试图找出它是什么jar文件,到目前为止我已经尝试了以下内容:
Class<?> tidyClass = Class.forName(Tidy.class.getName());
ClassLoader tidyLoader = tidyClass.getClassLoader();
String name = Tidy.class.getName() + ".class"; // results in tidyClass=class org.w3c.tidy.Tidy
System.out.println("resource="+tidyLoader.getResource(name)); // results in tidyLoader=org.codehaus.classworlds.RealmClassLoader@337d0f
System.out.println("path="+tidyLoader.getResource(name).getPath()); // results in resource=null
我在某处看到路径应该显示jar但显然没有这个类加载器......我怎么能弄明白呢?一切都像日食中的魅力一样,但当我和maven一起跑的时候,我得到了这个烂摊子.BTW eclipse说
tidyClass=class org.w3c.tidy.Tidy
tidyLoader=sun.misc.Launcher$AppClassLoader@1a7bf11
resource=null so no jar info either.
答案 0 :(得分:6)
尝试这样的事情:
Class clazz = null;
try {
clazz = Class.forName( typeName );
if ( clazz != null && clazz.getProtectionDomain() != null
&& clazz.getProtectionDomain().getCodeSource() != null )
{
URL codeLocation = clazz.getProtectionDomain().getCodeSource()
.getLocation();
System.out.println( codeLocation.toString() );
}
}
catch ( ClassNotFoundException e ) {
System.out.println( e.getMessage() );
}
其中typeName =“org.w3c.tidy.Tidy”。