Solo 用户指南

本贴最后更新于 1362 天前,其中的信息可能已经时移世改

Solo

小而美的博客系统,专为程序员设计





English

💡 简介

Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

欢迎到 Solo 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源

b3logos.jpg

🗃 案例

https://ld246.com/top/solo

✨ 功能

🎨 界面

开始使用

start.png

后台首页

console.png

编辑文章

post.png

选择皮肤

skins.png

前台界面

pinghsu.png

Bubble.png

nijigen.png

timeline.png

Casper.png

Jane.png

🍱 皮肤

目前内置的皮肤如下,可点击进行预览:

欢迎在这里推荐好看的皮肤,我们会尽量进行制作。

🛠️ 安装

Solo 支持“动静两用”:

  • 动态博客:在服务器上搭建,进程常驻内存运行,在线使用
  • 静态博客:在本地电脑运行,写作完成后生成导出静态站点

视频教程

更多视频教程陆续制作中,欢迎到 B 站关注我:报废程序员 D

本地运行

本地运行主要用于试用或者生成静态站点,生成静态站点的用法请参考这里

(视频演示教程请看这里

下载最新的 Solo 包解压,进入解压目录执行:

  • Windows: java -cp "lib/*;." org.b3log.solo.Server
  • Unix-like: java -cp "lib/*:." org.b3log.solo.Server

如果你有 Java 开发环境,可参考这里通过源码构建运行(视频演示教程请看这里)。

Docker 部署

Docker 方式部署是动态博客用法,主要用于在服务器上部署动态博客。

(视频演示教程请看这里

获取最新镜像

docker pull b3log/solo

启动容器

注意:对于如下命令,如果你不确定如何使用 \ 来进行换行,就不要换行了,一行内写完整条命令。

  • 使用 MySQL

    手动建库(库名 solo ,字符集使用 utf8mb4 ,排序规则 utf8mb4_general_ci ):

    create database solo default character set utf8mb4 collate utf8mb4_general_ci;
    create user 'root'@'127.0.0.1' identified by '123456';
    grant all privileges on *.* to 'root'@'127.0.0.1';
    flush privileges;
    

    启动容器:

    docker run --detach --name solo --network=host \
        --env RUNTIME_DB="MYSQL" \
        --env JDBC_USERNAME="root" \
        --env JDBC_PASSWORD="123456" \
        --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
        --env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" \
        b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=
    

    为了简单,使用了主机网络模式来连接主机上的 MySQL。

  • 使用 H2 Database

    docker run --detach --name solo --volume ~/solo_h2/:/opt/solo/h2/ --publish 8080:8080 \
        --env RUNTIME_DB="H2" \
        --env JDBC_USERNAME="root" \
        --env JDBC_PASSWORD="123456" \
        --env JDBC_DRIVER="org.h2.Driver" \
        --env JDBC_URL="jdbc:h2:/opt/solo/h2/db;MODE=MYSQL" \
        b3log/solo --listen_port=8080 --server_scheme=http --server_host=localhost --server_port=
    

启动参数说明:

  • --listen_port:进程监听端口
  • --server_scheme:最终访问协议,如果反代服务启用了 HTTPS 这里也需要改为 https
  • --server_host:最终访问域名或公网 IP,不要带端口
  • --server_port:最终访问端口,使用浏览器默认的 80 或者 443 的话值留空即可

完整启动参数的说明可以使用 -h 来查看。

日志配置

默认通过 log4j2 将日志打印到标准输出流,可以通过 docker logs solo 进行查看。如果需要覆盖 log4j 配置,可通过挂载文件实现:

--volume ~/log4j2.xml:/opt/solo/log4j2.xml

挂载第三方皮肤

如果需要使用第三方皮肤,可以挂载目录 skins,目录结构请参考原版 skins:

--volume ~/skins/:/opt/solo/skins/

版本升级

  1. 拉取最新镜像
  2. 重启容器

可参考这里编写一个重启脚本,并通过 crontab 每日凌晨运行来实现自动更新。

Docker Compose

请参考这里,感谢 @liumapp 提供。

NGINX 反代

upstream backend {
    server localhost:8080; # Solo 监听端口
}

server {
    listen       80;
    server_name  88250.b3log.org; # 博客域名

    access_log off;

    location / {
        proxy_pass http://backend$request_uri;
        proxy_set_header  Host $http_host;
        proxy_set_header  X-Real-IP $remote_addr;
        client_max_body_size  10m;
    }
}

请务必配置

proxy_set_header  Host $http_host;
proxy_set_header  X-Real-IP $remote_addr;

否则访问页面可能会出现“Latke 配置错误”或者样式异常;统计在线访客功能会不正常。

📜 文档

🏘️ 社区

📄 授权

Solo 使用 木兰宽松许可证, 第 2 版 开源协议。

🙏 鸣谢


初始化后

初始化成功后请务必查看自动发布的第一篇文章,里面有一些必要的操作,请务必完成。然后请到管理后台 -> 工具 -> 偏好设定中进行一下博客的细节配置。

信息配置

  • 博客基本信息:标题、子标题、SEO 信息
  • HTML head:可以配置脚本,比如百度统计
  • 公告:可以使用 HTML 和脚本进行配置
  • 页脚:主要用来放备案信息,也可以使用 HTML 和脚本进行配置

签名档

最多可以配置 3 个签名档,发布文章的时候选择一个使用,可以使用 HTML 和脚本进行配置。

参数设置

下面是一些比较有特色或重要的参数:

  • 列表显示方式:仅标题/标题 + 摘要/标题 + 正文
  • 各种分页参数
  • 文章更新提示:启用后一旦某篇文章更新过,则会在文章标题处显示“有更新”的提示,并且排序靠前
  • 允许同步 GitHub 仓库:将文章数据自动导出到 GitHub 仓库,用于展示和备份

导入 Markdown

请参考 Solo 支持 Hexo/Jekyll 数据导入

备份

安全第一,血泪的教训 😢

手动备份

  • H2:备份 home 目录下的 solo_h2 文件夹
  • MySQL:使用 MySQL 相关备份工具

社区端备份

可在工具 - 偏好设定 - 参数设置中勾选“备份所有文章到社区”,开启后将每隔 24 小时自动备份所有文章(包括草稿和加密文章)到社区,具体细节请参考 Solo 拉取 GitHub 仓库和自动备份

GitHub 备份

可在工具 - 偏好设定 - 参数设置中填写 GitHub token,填写后将每隔 24 小时自动备份公开文章(不包括草稿和加密文章)到你的 GitHub 仓库 solo-blog,具体细节请参考 solo-blog 仓库同步功能回来了

其他一些特性

多用户

可以几个用户同时使用一个博客发布文章,主要用在团队博客这个场景。权限方面做了简单隔离,非管理员用户可以看到其他用户的博文/评论列表,但是不能进行操作。

RSS/Atom/Sitemap

提供两种订阅供稿:Atom 1.0、RSS 2.0:

  • Atom: /rss.xml
  • RSS: /atom.xml

不要用浏览器直接打开,请通过阅读器查看。另外,Solo 也能生成全站文章的 sitemap.xml。

前台皮肤切换

通过 URL 带参(比如 http://88250.b3log.org/?skin=Finding )来确定渲染使用的皮肤。

使用场景举例:

  • 在不安装 Solo 的情况下可以方便预览各个皮肤(在 Demo 上)
  • 方便二次开发时集成切换皮肤
  • 博主可以让访客体验到不同的效果,比如:这个皮肤好看?还是这个好看?
  1. 只有在首页( / )会取参数 skin=xxx
  2. 如果带有就记录到 Cookie 里面,如果带有 skin=default 或皮肤不存在则清空 Cookie
  3. 如果要切换成后台默认的皮肤,在首页带参 skin=default

站外相关文章

“站外相关文章”指的是其他人使用 Solo 发布的文章,该文章含有与你的文章相同的标签。该功能主要是为了加强各个 Solo 博客之间的互动性,让博客访问者可以更有效地访问到相关的内容。

这是 B3log 构思的一部分实现,请大家积极参与进来 🙏

FAQ

为什么要“捆绑”登录链滴社区账号?

Solo 和 Pipe 的定位是 B3log 分布式社区的博客端节点,并不是通常意义上的独立博客,所以账号体系需要进行统一,否则带来的问题会很多,这也是一路下来探索的,具体经历细节请看这里

在 Solo v3 之前一直是独立账号体系,但经过长时间验证效果并不理想:

  • 不方便,用户需要在社区端和博客端配置账号关联关系
  • 不安全,账号的关联关系需要双向验证,如果不验证账号归属,会被冒名

这两个问题是矛盾的,所以为了解决它需要将账号在 B3log 网络中进行唯一化。一开始的设计方案是通过公私钥(类似区块链的钱包原理),但这个方案在现阶段过于复杂,用户使用门槛有点高所以暂时放弃了。公私钥的方案在星火项目里进行过测试验证,技术上应该没问题,以后的鱼塘项目可能会采用这个方案。

所以再次重申一下,Solo 和 Pipe 是 B3log 分布式社区的博客端节点。举个最容易理解的例子,这就好比某些厂商的软件,没有这个厂商的账号是用不了的。打通其他网络的方案是在博客端或者社区端接入其他网络的账号,目前已经在链滴社区上接入 GitHub 登录(可在账号设置中绑定),Solo 可通过 GitHub token 来将文章同步到自己的仓库,避免整个 B3log 网络过度封闭内卷。

最后,希望目前加入到 B3log 的用户是认可这个设计的,如果不认可的话其实就没必要加入使用了,节省自己时间同时也能保护 B3log。当然,不排除以后设计还会有所变化,欢迎参与思考讨论,谢谢。

服务器内存太小?

可考虑使用 Solo 的静态站点支持,本地写作完成后导出静态站点,发布 GitHub Pages 等服务。

如果还是想使用动态博客的话,可使用内嵌的 H2 数据库代替 MySQL。但建议还是进行内存升级,然后使用 Docker 和 MySQL 部署,这样不仅可以通过更新镜像进行平滑升级,还能使用 MySQL 相关工具更方便地进行数据库运维。

如何打 jar 包部署?

请在 pom.xml 中搜索 maven-assembly-plugin 的注释进行配置即可。请注意:使用 jar 运行不支持:

  • 静态站点生成
  • 可能存在其他未知问题

建议尽量不要打 jar 部署,服务器上请通过 Docker 部署。

获取社区文件存储服务上传凭证异常?

请参考这里进行配置。

如何引入自定义静态资源,比如 .mp3?

请通过 NGINX 反代静态资源实现。

如何获得更好的 Markdown 渲染效果?

Solo 默认是使用内建的 flexmark 进行 md 渲染,可能对有的场景下的渲染效果不是很好。如果你想要获得更好的 md 渲染效果请参考这里

为什么在线访问计数一直都是 1?

在线访问计数是通过访问者 IP 去重的,每 10 分钟定时刷新一次。如果用了反向代理,请在代理配置部分加入客户端地址标头。比如 NGINX 需要加入如下配置:

proxy_set_header  X-Real-IP  $remote_addr;

如何插入广告展位?

可通过签名档、公告栏中插入 HTML、JS 代码来实现。

如何放置备案信息?

可通过在页脚配置中插入 HTML、JS 代码来实现。

如何使用 jsDelivr CDN 来加速?

启动时加入命令行参数:

--static_server_scheme=https
--static_server_host=cdn.jsdelivr.net
--static_server_port=
--static_path=/gh/88250/solo/src/main/resources

请注意,以上配置仅支持内置皮肤,如果挂载了第三方皮肤的话请按需调整。

Solo 会一直维护下去么?

Solo 的第一个版本发布于 2010 年,永不断更 😼

Solo 从第一版开始就支持平滑升级,从 v3.0.0 开始支持跨版本升级。在程序升级、数据兼容迁移方面我们做了很多工作。另外,Solo 还支持将数据导出成多种格式,所有的这些努力为的就是让大家能够免去后顾之忧,将精力更多放在创作和分享上。

结语

如果你在使用 Solo 过程中碰到问题或者有需求要提,欢迎跟帖,我们会在第一时间回复;如果你对 Solo 开发方面感兴趣,请参考 Solo 从设计到实现

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1424 引用 • 10041 回帖 • 470 关注
  • 安装

    你若安好,便是晴天。

    128 引用 • 1183 回帖
  • 文档
    56 引用 • 1288 回帖 • 2 关注
84 引用
CentOS7 服务器搭建 Solo 个人博客 nginx 简单配置 Solo 获取社区文件存储服务上传凭证异常 solo 支持导入博客园的博客么? Solo 搭建个人博客心得(最简版) solo 用 docker 安装,并用 nginx 配置 https 教程 博客搭起来了,纪念一下哈哈哈 solo 怎么才能跑起来? Solo | 优雅的使用 Solo 静态博客 使用 Solo 静态站点功能部署站点到 gitee 上的 Pages 关于 solo 皮肤一直 404 从零开始搭建 solo 个人博客系统 2019 年 11 月 17 日深夜有感 从零开始安装 solo 博客 通过 solo 快速搭建个人博客 (Mariadb 数据库) Solo 网站安装教程 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 Solo 博客搭建之路 解决 Solo 主题 Bubble 主页背景图片加载慢的问题 新皮肤 solo-nexmoe 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 solo 使用 docker 部署,加载页面图片过慢的问题 使用 docker-compose 一键启动 bolo 博客 你们的服务器啥配置啊? GitHub 图床的正确用法,通过 jsDelivr CDN 全球加速 个人 solo 博客搭建 升级到 3.8.0 后:Latke 配置错误 solo 页面无法正常加载 Solo v3.6.8 发布,编辑器支持所见即所得模式 为什么我 solo 博客生成的 rss.xml 显示不正常? solo 写博客的时候公式好像不能预览 从零开始安装 solo 博客 感谢 Solo,开源万岁。从无到有全记录。 Solo 用户指南 Docker 方式部署 Solo 博客系统全流程 Docker 方式部署 Solo 博客系统全流程 solo 504 连接超时,怎么破? solo_Tomcat 转 docker 并升级 (问题好多!) solo 开发环境问题 solo 开发环境问题 solo 开发环境问题 Solo 用户指南 Solo v3.4.0 发布,自动同步 GitHub 仓库 搭建 Solo 博客:安装部署 V3.2 升级到 V3.3 页面出现排版错乱的情况 centos7.4 上部署 solo 开源博客系統 Solo v2.9.9 发布,同步 GitHub 仓库 开源博客系統 Solo v2.9.8 发布,支持阿里云 OSS solo 不能安装问题 solo 博客升级之后!样式全丢了!!! solo 版本升级, 不覆盖自身样式 请问各位大神一个关于静态页面的问题,在线求教 Java 开源博客 Solo 2.4.0 发布 Solo 用户指南 Solo 用户指南 solo 访问问题 Solo 的这个评论验证码是不是太难辨别了 solo 默认不支持表格语法吗 搭建 Solo 开发环境 为什么将 solo 的包解压运行后是这样的 Java 开源博客 Solo 2.1.0 发布 Java 开源博客 Solo 2.2.0 发布 Java 开源博客 Solo 2.3.0 发布 Java 开源博客 Solo 2.4.0 发布 使用 docker 搭建 solo 博客系统 Java 开源博客 Solo 2.5.0 发布 Java 开源博客 Solo 2.6.0 发布 Java 开源博客 Solo 2.7.0 发布 Java 开源博客 Solo 2.8.0 发布 Java 开源博客 Solo 2.9.0 发布,支持后台文章搜索 Java 开源博客 Solo 2.9.1 发布,支持 PJAX [博客] 在阿里云上部署 solo 博客 Java 开源博客 Solo 2.9.2 发布,看板娘来了 阿里云部署 solo 博客 Java 开源博客 Solo 2.9.3 发布,可指定移动端皮肤 Java 开源博客 Solo 2.9.4 发布,新皮肤加数据库重构 Java 开源博客 Solo 2.9.5 发布,大量细节优化 开源博客系統 Solo 2.9.6 发布,大量细节优化 使用 Azure App Service 免费计划部署 Solo 博客过程记录 开源博客 Solo 安装详细教程及注意事项 开源博客系統 Solo 2.9.7 发布,新皮肤 Jane

相关帖子

优质回帖
  • 加油。这是个很棒的开源项目。我对比了很多 java 开源博客。最终还是剧的 solo 是最棒的。尤其是,solo 是一个生态。让孤独的码农有了家的感觉。

  • csfwff 1

    登录后有个管理按钮
    地址是 /admin-index.do#main

  • ihewro 1

    既然账号和社区网络是连通的,我觉的可以考虑 社区注册一个账号就可以自动生成自己的博客。这样用户使用门槛很低。

    用户可以选择不同的付费,有不同的图片存储空间,文字实际上没有多大空间,这样的话更有利于整个 blog 生态与社区的生态绑定

    自动生成的博客支持绑定已经备案的域名。类似于 farbox 博客

341 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Jackson

    可以了,是生成的证书认证有问题,我改用另外的生成方式了,🙏

  • Uambiguous

    使用 marked 端口也存活,还需要其他什么步骤才能实现前端 Markdown 渲染效果吗?

    1 回复
  • 88250

    重启 Solo,日志会打印出当前的 markdown 引擎。

    1 回复
  • Uambiguous

    可以修改渲染样式吗?

    1 回复
  • 88250

    改代码吧。

  • qingsi

    [org.b3log.latke.Latkes:878]: Read skin configuration error[msg=null]
    [org.b3log.solo.SoloServletListener:304]: Can't load the default skins, please make sure skin [Jane] is under skins directory and structure correctly
    楼主,我在启动的时候没有读到这个配置文件有点奇怪,可以帮忙看看不

    不好意思,我原来皮肤放在了另外的仓库了。我再看看,不好意思。

  • weiweihacpai

    你好,服务器只有 IP 没有域名不能部署吗,已经在配置文件中将服务器指向云主机的 IP 了,可是用 IP 访问显示配置错误

    1 回复
  • 88250

    可以配置为 IP 的,具体请 F12 查看网络请求。

  • hwj19941028

    D 老师,你好. 我用 Nginx 代理 8080 端口以后.部分字体和看板娘出现了跨域问题,访问不到. 修改了半天 nginx 配置文件,还是没有解决.这块应该怎么设置

    imagepng

    1 回复
  • samye

    支持泛域名解析吗?比如 A 博客自定义使用域名 a.blog.solo.org,B 博客自定义使用 b.blog.solo.org 访问,不自定义的,通过 blog.solo.org/a,blog/solo.org/b 访问

    1 回复
  • 88250

    NGINX 上配置跨域头,网上搜搜能解决。

  • 88250

    Solo 主要是单人、团队博客,不是博客平台。如果要搭建多人独立博客的话,可以部署多个 Solo 在同一个容器,然后配置容器的“虚拟主机”。

    1 回复
  • samye

    😂 我一直以为是多用户的博客平台,pipe 也是单人/团队博客平台吧?

    1 回复
  • 88250

    Pipe 是多用户博客平台。

  • smq 1

    D 大,貌似不能自动建库啊。

    imagepng

    1 回复
  • 88250

    初始化完了才自动建,等有空我调整一下。

    1 回复
  • smq

    😳 这回复也太快了吧[手动捂脸]

  • mindops

    配置里的 staticServePath 是不是拼写错了,不应该是 staticServerPath 吗?
    还有一个问题,nginx 反向代理如何优雅配置"contextPath",现在通过域名访问,必须要输入 contextPath 才能访问到,latke.properties 里配置了 contextPath 页面都打不开了,返回空白。

    1 回复
  • 88250
    1. staticServePath 没有错
    2. https://hacpai.com/article/1474087427032
  • niuniu

    D 大,我博客改地址了,在使用新的地址采用 github 授权登录时,总显示"403 Forbidden!",我去 github 中将授权的 b3blog 删除重新授权也不行,总显示 Forbidden.主要是不打算换 github 邮箱.博客地址从 http://niuniu.hicp.net 改到了 http://blogs.gicp.net ,不管怎么操作都无法正常使用 github 登录,求救啊,多谢!

    1 回复
  • zxniuniu

    D 大,对,用户名,邮箱两边都一样,连密码都一样,还是不行,很是尴尬啊.

    1 回复
  • 88250

    博客设置里面要打开开放注册。

  • zxniuniu

    感谢 D 大,大新年的,还这么敬业 😄 ,我博客是开放注册的,采用域名 http://blogs.gicp.net 还是不行, 不过我采用 https 后,使用域名 https://fuyiyi.imdo.co 就可以了,所以准备把博客 http://niuniu.hicp.net 迁移到 https://fuyiyi.imdo.co 中.再次感谢 D 大!😂

  • zxniuniu

    D 大,再请教个问题,如果文件上传采用的是本地,即配置了 uploadDir 参数的本地路径,那在搭建 solo 集群时如何解决这个文件同步问题.目前可选的方案,如 smb,ftp 等,均需要改文件上传的方法(这个方法版本更新后又得编译),D 大有没有推荐的方法.

    1 回复
  • 88250

    挂共享文件存储。另外,Solo 的会话不支持集群,还有缓存也会不一致。个人博客怕是没必要上集群高可用吧 😂

  • haoran

    Found lambda method reference impl method failed!
    19 年更新的 solo 发布不成功,老铁们帮忙看看啥情况啊

    1 回复
  • 88250

    使用 JDK8+

    1 回复
  • haoran
    该回帖仅作者和楼主可见
  • jruguang
    该回帖仅作者和楼主可见
    1 回复
  • 88250

    感谢反馈,是个缺陷,麻烦拉一下最新代码进行构建。

    1 回复
  • jruguang
    该回帖仅作者和楼主可见
    1 回复
  • javaFile

    初始化失败

    1 回复
  • 88250

    现在应该可以用了吧。

  • 88250

    麻烦贴一下错误日志,暂时不要使用截图,谢谢。

  • javaFile
    该回帖仅作者和楼主可见
  • 912317966

    [org.b3log.latke.plugin.PluginManager:148]: Load plugin under directory[/plugins/list/] failed
    java.lang.NullPointerException
    at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:304)
    at java.base/java.util.ArrayDeque.add(ArrayDeque.java:495)
    at java.base/jdk.internal.loader.URLClassPath.(URLClassPath.java:154)
    at java.base/jdk.internal.loader.URLClassPath.(URLClassPath.java:171)
    at java.base/java.net.URLClassLoader.(URLClassLoader.java:120)
    你好,请问这个 plugin 加载不了是怎么回事

    1 回复
  • 88250

    有可能是打包问题,请问是你自己打包的还是下载的发布包?

    1 回复
  • 912317966

    我下载的是发布包 3.0.0 版本的

  • shenmueta

    同 @912317966 问题,github 拉的代码,使用 tomcat 启动加载插件时报
    ava.lang.NullPointerException
    at java.base/java.util.ArrayDeque.addLast(ArrayDeque.java:304)
    at java.base/java.util.ArrayDeque.add(ArrayDeque.java:495)
    at java.base/jdk.internal.loader.URLClassPath.(URLClassPath.java:154)
    at java.base/jdk.internal.loader.URLClassPath.(URLClassPath.java:171)
    at java.base/java.net.URLClassLoader.(URLClassLoader.java:120)
    at org.b3log.latke.plugin.PluginManager.load(PluginManager.java:185)
    at org.b3log.latke.plugin.PluginManager.load(PluginManager.java:142)
    at org.b3log.solo.SoloServletListener.contextInitialized(SoloServletListener.java:114)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4579)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5041)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:742)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:718)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:703)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1737)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:287)
    具体异常处见图
    TIM 图片 20190220174842.png

    1 回复
  • 88250

    这个问题有点不好定位,能使用 mvn jetty:run 启动看看吗?

    1 回复
  • shenmueta 1

    额,还是同样的问题 下面
    plugin = kanbanniang
    而 servletContext.getResource("/plugins/" + plugin + "classes");
    尝试寻找 /plugins/kanbanniangclasses
    /plugins/kanbanniang/目录没有 kanbanniangclasses 导致
    不知对不对

            String plugin = StringUtils.substringAfter(pluginDirPath, "/plugins");
            plugin = plugin.replace("/", "");
    
            final File file = Latkes.getWebFile("/plugins/" + plugin + "/plugin.properties");
            props.load(new FileInputStream(file));
    
            final URL defaultClassesFileDirURL = servletContext.getResource("/plugins/" + plugin + "classes");
    
    1 回复
  • 88250

    感谢反馈,稍后我再仔细看下。

  • julee

    为什么没有看到正常的移动端皮肤?

    1 回复
  • 88250

    基本所有皮肤都是自适应移动端的,如果需要指定移动端皮肤,可以通过配置 solo.props 中的 mobile.skin

  • Uambiguous

    MySQL 的版本还是只能用 5.5 吗?支持 5.7 不?

    1 回复
  • 88250

    建议用 MySQL 8

  • D 大,复杂的数学公式不显示,typora 跟 cmdmarkdown 都可以显示出来。

    md 如下:

    $$
    N = \sum_r d_r \cdot N_r
    $$
    
    $$
    P(w_i|w_{i-1}) = \begin{cases} 
    f(w_i|w_{i-1}) \,\,\,\qquad \, \#(w_{i-1}, w_i) \ge T \\
    f_{gt}(w_i|w{i-1}) \quad \, 0 \lt \#(w_{i-1, w_i}) \lt T \\
    Q(w_{i-1}) \cdot f(w_i) \,\,\, 其它
    \end{cases}
    $$
    

    solo 显示如下:
    image.png

    3 回复
  • 88250

    收到,稍后改进。
    @Vanessa

请输入回帖内容 ...