【问题标题】:Tomcat webapp ClassLoader not working with runtime compilationTomcat webapp ClassLoader 不适用于运行时编译
【发布时间】:2012-09-19 11:53:19
【问题描述】:

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

编译的 Java 类

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>

【问题讨论】:

    标签: java tomcat maven


    【解决方案1】:

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

    【讨论】:

    • 不走运。用我的 context.xml 编辑原始问题
    • 据我所知,您没有按照建议将 reloadable 设置为 true,请尝试一下,如果这不起作用,您可以尝试检查相关问题是否对您有帮助,或者您可以尝试 Tomcat 关于Manager 应用程序在运行时重新加载应用程序。
    • 如果我错了,请纠正我,但reloadable 不只是观察 WEB-INF/lib 和 WEB-INF/classes 目录的更改,然后重新启动应用程序吗?我已经多次取消部署和重新部署该应用程序,所以我认为这不是问题。运行时 JavaCompiler 只是没有在其类路径中找到所需的依赖项。
    【解决方案2】:

    事实证明,我需要在代码中将显式类路径传递给 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));
    

    【讨论】:

      猜你喜欢
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多