1、yum 命令报错 could not resolve host
// 想要添加 clickhouse 仓库
yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
已加载插件:langpacks
adding repo from: https://packages.clickhouse.com/rpm/clickhouse.repo
grabbing file https://packages.clickhouse.com/rpm/clickhouse.repo to /etc/yum.repos.d/clickhouse.repo
Could not fetch/save url https://packages.clickhouse.com/rpm/clickhouse.repo to file /etc/yum.repos.d/clickhouse.repo: [Errno 14] curl#6 - "Could not resolve host: packages.clickhouse.com; 未知的错误"
原因是网络环境的问题,不仅是 DNS 的问题,还可能是内网。
2、执行 java -jar **.jar 命令报错 “no main manifest attribute, in **.jar”
2.1 原因:
直接执行 java -jar *.jar 的行为,就是默认了 *.jar 是有主类的。
而一般 jar 包是没主类的,例如 gradle 中的插件 java 和 java-libary,这俩打出的 jar 包没主类,供引入到其它项目里直接用的,例如 Java SDK。
2.2 方法:
有俩种方法可以从主类处运行。
- 需要在 MANIFEST.MF 中指定 Main-Class 项,然后执行 java -jar **.jar 时就可找到对应的主类了。
- java -cp **.jar 主类在包中的路径
3、在 build.gradle 构建脚本中指定了 mainClass,build 打成 jar 包后执行 java -jar 仍然报错 no main manifest attribute?
plugins {
id 'application'
}
application {
mainClass.set("cn.chenbbay.ClickHouseClient")
}
如上所示,在构建脚本中引入了插件 application,引入插件 application 主要是往工程中添加如下的任务。

所以脚本中指定 mainClass 并不影响 jar 任务,而是指定入口类,满足 application 插件添加的那些任务的需求的,例如 run 任务就要求有入口主类。
所以得在 jar 任务中定义主类,如下所示。
tasks.named("jar") {
manifest {
attributes("Main-Class": "cn.chenbbay.ClickHouseClient")
}
}
然后执行构建 build 任务,build 任务中包含了 jar 子任务,会发现文件解决了。
参考资料:
https://docs.gradle.org/current/userguide/application_plugin.html#sec:application_tasks
4、SLF4J 报错 "Failed to load class org.slf4j.impl.StaticLoggerBinder"
4.1. 场景
在执行依赖 SLF4J 的 jar 包时,终端报错如下图 1 所示。

但是我明明是添加了 SLF4J 依赖包 slf4j-api-1.7.##.jar 的啊?
4.2. 方案
看报错就是少了某些依赖包吧,在类路径下没有找到 slf4j.impl.StaticLoggerBinder 这个类。
引入依赖包 slf4j-simple-1.7.##.jar,至于版本号,最好和 slf4j-api-1.7.##.jar 一致。
5、Tomcat 容器中运行 Java EE Servlet 报错
5.1. 问题
具体报错为: "java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet”
5.2. 原因
可能是因为 Tomcat 的版本太新,提供的 Jar 包有所变动,导致找不到需要用的包
5.3. 方案
- 可以使用 Tomcat 较旧版本;
- 也可以将源 Java 文件中的 Servlet 依赖修改为使用当前使用的 Tomcat / lib 中的 Jar 包;
6、 访问 Tomcat 报错 "cannot be cast to javax.servlet.Servlet"
6.1. 原因:
可能是因为 Tomcat 容器中已经提供了各种 jar 包(jar 包可以在 lib 目录下找到),如果 WEB-INF / lib 文件夹下仍提供相同的 jar 包就会导致冲突。
6.2. 方案
删除 WEB-INF / lib 下重复的 jar 包即可。
7、Mac OSX 的终端打开就出现很多行 “declare -x”?
7.1 可能原因:
安装某个软件,配置环境变量的时候,改动了.bashrc | .bash_profile | .profile文件。.bash_profile 文件被改动,且 export 单独一行就会导致出现这种情况。
7.2 解决办法:
执行 open .bash_profile 命令查看文件内容,发现我的问题是在配置 anaconda 环境变量的时候产生了 export 单独一行,除之,命令行恢复正常。
8、ssh 远程连接 ubuntu 报错 “kex_exchange_identification”
可能原因是:ubuntu 默认没有安装 openssh-server,没有开放ssh服务。
9、java -jar 执行报错 "... has been compiled by a more recent version of the java runtime, this version of the java runtime only recognizes class file version up to ..."
这个错误是因为本地编译 Java 项目用的 JRE 版本与目标运行环境的 JRE 版本不一样导致的。
目标运行环境的 JRE 只能辨识至多 ... 版本的 class 文件。例如,检查发现目标平台是 Java8 环境,而本地编译打包使用的是 Java11。所以可以在配置文件中设置toolchain 选项,指定构建项目所使用的 Java 版本为 8。
10、IntelliJ 中运行 Tomcat 插件时报错 catalina.sh permission denied
权限的问题,可以给 catalina.sh 所在目录赋予 777 权限。即 chmod 777 *.sh
11、IntelliJ 开发 Web 时,配置文件 web.xml 报错 “Servlet should have a mapping”
原因是 web.xml 文件的位置没有配置正确,在 Facets-Web 中,字段 Deployment descriptor 需要配置正确,正确指定 web.xml 的位置。
12、IntelliJ 配置 Tomcat 的运行环境,可是找不到 Tomcat Server -> Local 的选项
原因可能是你的 IntelliJ 是社区版本的,没有这个功能。需要下载 Ultimate 版本的。
网友评论