【分享】jfinal check whether "tools.jar" is

https://www.l2qq.com/share/91

java访问报错:

第一次的时候还能正常使用,编译之后报错

jfinal Can not get javax.tools.JavaCompiler, check whether "tools.jar" is in the environment variable CLASSPATH

原因:

https://www.jfinal.com/doc/4-8

添加了注入Proxy 动态代理,需要:在main添加代码:

public void configConstant(Constants me) {
 
  // 4.6 之前的版本的配置方式: me.setProxyFactory(new CglibProxyFactory());
  me.setToCglibProxyFactory();  // 4.6 版本新增配置方式
}

pom.xml添加依赖
<dependency>
   <groupId>cglib</groupId>
   <artifactId>cglib-nodep</artifactId>
   <version>3.2.5</version>
</dependency>
2019-11-11 10:15:32
[ERROR]-[Thread: XNIO-1 task-1]-[com.jfinal.core.ActionHandler.handle()]: com.wx.room.RoomController.findById() : /room/findById
java.lang.RuntimeException: Can not get javax.tools.JavaCompiler, check whether "tools.jar" is in the environment variable CLASSPATH
 at com.jfinal.proxy.ProxyCompiler.compile(ProxyCompiler.java:131)
 at com.jfinal.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:69)
 at com.jfinal.proxy.ProxyFactory.get(ProxyFactory.java:41)
 at com.jfinal.proxy.Proxy.get(Proxy.java:32)
 at com.jfinal.aop.AopFactory.createObject(AopFactory.java:173)
 at com.jfinal.aop.AopFactory.doGetSingleton(AopFactory.java:87)
 at com.jfinal.aop.AopFactory.doGet(AopFactory.java:65)
 at com.jfinal.aop.AopFactory.doInject(AopFactory.java:157)
 at com.jfinal.aop.AopFactory.inject(AopFactory.java:125)
 at com.jfinal.aop.Aop.inject(Aop.java:105)
 at com.jfinal.core.ActionHandler.handle(ActionHandler.java:84)
 at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:89)
 at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
 at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
 at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
 at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
 at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
 at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
 at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
 at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
 at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
 at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
 at io.undertow.security.handlers.A


评论区

JFinal

2019-11-11 12:36

感谢分享

Shanice

2019-11-26 15:58

@JFinal @JFinal 请问除此之外还有什么解决办法?我也遇到这个问题了,上述方法试了不行。是部署在服务器上一段时候后报的异常

Shanice

2019-11-26 16:20

@JFinal 好像是加了事务注解@Before(Tx.class)引起的,冲突?

JFinal

2019-11-26 16:56

@Shanice 使用下面的配置是最好的办法:
public void configConstant(Constants me) {
// 4.6 之前的版本的配置方式: me.setProxyFactory(new CglibProxyFactory());
me.setToCglibProxyFactory(); // 4.6 版本新增配置方式
}

没有比这更好用的了

xasyulwx

2019-12-20 21:43

@JFinal
我增加了me.setToCglibProxyFactory(); 但是对于有@Before(Tx.class),其Controller调用还是会报错,不知是什么原因?

JFinal

2019-12-20 21:57

@xasyulwx 要看是什么错误,添加了这个配置,错误应该不是上述那种了

1398577849

2019-12-22 19:57

@JFinal 添加在哪,使用那个包都没说明呢,

启辰创新科技有限公司

2020-01-17 11:54

部署悟空crm的时候也遇到这种错误,按照这个方法解决了

德航开发

2020-02-25 12:37

南兄

2020-05-09 09:51

这个到底是什么问题?无法解决

JFinal

2020-05-09 10:49

@南兄 CLASSPATH 环境变量要配置 JDK 的 tools.jar

JRE 没有这个 tools.jar 的话就需要配置 me.setToCglibProxyFactory();

文档中有说明:
https://jfinal.com/doc/4-8

谜一般的梦

2020-05-15 15:59

请问怎么在pom.xml中添加依赖啊?我导入项目后没找到这个文件

fmpoffice

2020-06-29 16:36

@谜一般的梦 文档中有说明:
https://jfinal.com/doc/4-8

热门反馈

扫码入社