4

我有一些在运行时生成并使用

JavaCompiler.CompilationTask.

生成的代码引用了其他项目中的类,这些类是我项目的 Maven 依赖项。一切都在本地运行良好,但是当我部署到我们的开发 Tomcat 服务器时,我得到了一堆

"package xxx does not exist"

"cannot find symbol"

编译任务中的错误。我检查了Tomcat 部署的 webapp 项目的WEB-INF/lib目录,所有的 jar 都在那里,包括项目依赖项。目录中的所有内容不WEB-INF/lib应该在运行时对 Tomcat 项目可用吗?

编辑:这是我的 context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
        virtualClasspath="${catalina.home}/webapps/kdweb/WEB-INF/lib/acommons-0.0.1-SNAPSHOT.jar;${catalina.home}/webapps/kdweb/WEB-INF/lib/abizcommons-0.0.1-SNAPSHOT.jar;${catalina.home}/webapps/kdweb/WEB-INF/lib/kd_market_data-common-0.0.1-SNAPSHOT.jar;${catalina.home}/webapps/kdweb/WEB-INF/lib/aggregation-0.0.1-SNAPSHOT.jar;${catalina.home}/webapps/kdweb/WEB-INF/lib/apods-client-0.0.1-SNAPSHOT.jar;${catalina.home}/webapps/kdweb/WEB-INF/lib/framework-common-0.0.1-SNAPSHOT.jar" />
</Context>
4

2 回答 2

1

您可以使用Loader并将 reloadable 设置为 true。(也可能是相关的)

于 2012-09-19T12:12:51.627 回答
1

事实证明,我需要在代码中将显式类路径传递给 JavaCompiler.CompilationTask。这是我如何让它工作的:

String classPath = "webapps/WEB-INF/lib/jar1.jar;webapps/WEB-INF/lib/jar2.jar";
List<String> options = new ArrayList<String>();
options.addAll(Arrays.asList("-classpath", classPath));
final JavaCompiler.CompilationTask task = compiler.getTask(null, manager, null, options, null, Arrays.asList(source));
于 2012-09-20T14:51:44.230 回答