Javalite应用自定义包名、类名问题及启动报错咨询
Javalite 自定义包名、类名及启动报错问题解答
基础问题解答
1. 自定义顶级包名
可以自定义顶级包名,无需局限于示例中的app。只要保持Javalite推荐的子包结构(如config、controllers、models等子包置于自定义顶级包下)即可。
2. 类名自定义规范
Javalite的类名并非固定,核心类需遵循以下约定:
- 启动初始化类:默认约定为
AppBootstrap,放在[顶级包].config下,若自定义类名,需通过配置指定; - 控制器类:需遵循
[业务名称]Controller的命名格式,且存放在[顶级包].controllers子包中; - 模型类:通常采用驼峰式命名对应数据库表名,存放在
[顶级包].models子包中;
这些规范可在Javalite官方文档的ActiveWeb相关章节中查阅。
启动报错修复
你遇到的启动错误是Javalite默认寻找app.config.AppBootstrap但未找到导致的,结合你自定义的BCWServerBootstrap,可按以下步骤修复:
- 指定自定义Bootstrap类:在项目
src/main/resources/activeweb.properties文件中添加配置:
activeweb.bootstrap.class=你的实际顶级包.config.BCWServerBootstrap
替换为你项目中BCWServerBootstrap所在的完整包路径与类名。
2. 检查类继承关系:确保BCWServerBootstrap继承自org.javalite.activeweb.AppBootstrap,并正确实现init()方法。
3. 验证编译路径:在Eclipse中检查项目构建路径,确认自定义包和类已被正确编译到classpath,无编译错误。
报错日志详情
Jan 25, 2023 8:49:28 PM org.javalite.activeweb.RequestDispatcher initAppConfig SEVERE: Failed to create and init a new instance of class: app.config.AppBootstrap. Application failed to start, so it will not run. java.lang.ClassNotFoundException: app.config.AppBootstrap at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:315) at org.javalite.activeweb.RequestDispatcher.initAppConfig(RequestDispatcher.java:126) at org.javalite.activeweb.RequestDispatcher.initApp(RequestDispatcher.java:74) at org.javalite.activeweb.RequestDispatcher.init(RequestDispatcher.java:68) at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:133) at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:725) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:749) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:392) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1304) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:900) at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:306) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:532) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171) at org.eclipse.jetty.server.Server.start(Server.java:470) at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:415) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93) at org.ns.tools.bcweb.BCWJServer.webSetup(BCWJServer.java:24) at org.ns.tools.bcweb.BCWJServer.main(BCWJServer.java:11)
内容的提问来源于stack exchange,提问作者Nick S
相关产品推荐
相关产品推荐

