在tomcat服务器中,在运行时,我读取java类文件,并使用内部使用javacompiler的inmemoryjavacompiler库动态编译它们。
代码示例-
InMemoryJavaCompiler.newInstance()
.useOptions("-parameters",
"-classpath", sb.toString(),
"-Xlint:unchecked")
.compile(sourceCodeClassName,
sourceCode.toString());
这里sb(stringbuilder)表示从webinf/lib目录中读取的jar,用冒号分隔。
该代码适用于以下场景:
如果上面的编译代码保存在一个独立的类文件中,那么相关的库就设置在类路径中。编译成功。
我打印了jar文件,也就是说,我分别打印了sb值并复印了一份。我在终端中手动运行javac-classpath<sourcecode.java>。编译成功。
代码在以下情况下不起作用:
答。当上面的代码片段作为独立程序添加到eclipse中时,我遇到了源代码所实现的接口的noclassdeffound错误。
b。在tomcat中,相关的jar出现在contextname/web inf/lib/中,此外,jar还添加在-useoptions类路径中。即使这样,我也面临着源代码实现的接口noclassdeffound错误。
注意:lib目录或classpath值中没有jar的重复副本或jar的多个版本。该接口是hyperledger结构中存在的收缩接口
暂无答案!
目前还没有任何答案,快来回答吧!