目录
2、cvc-complex-type.2.4.a: ��������Ԫ�� 'base-e
4、The specified Gradle installation directory 'xxx' does not exist.
The specified Gradle installation directory XXX\gradle\gradle-2.14.1 - 简书修改
3、Web server failed to start. Port 8080 was already in use.
4、spring-boot-starter-parent下面的版本标红
5、非springboot的maven项目打包后的jar包没有包含依赖文件
IDEA 创建springboot失败 报错Request failed with status code 403 - 简书
一、Android
1、无法引用第三方包
引用第三方包,首先需要在模块目录下的build.gradle文件的dependences中添加对包的依赖,如下图
然后需要将该包对应的仓库添加到项目的setting.gradle(build.gradle )文件中,即为去该仓库下载对应的包,如下图:
此处如果使用的是http链接可能会因为安全问题失败,需要将其更改成https
2、cvc-complex-type.2.4.a: ��������Ԫ�� 'base-e
此种问题大概是gradle的各个配置版本不匹配导致,找到 一个可以运行的项目,参考其版本配置进行修改,常见的需要修改的地方:
build.gradle:
gradle-wrapper.properties:(gradle-6.5-bin.zip | gradle-6.1.1-all.zip)
3、仓库找不到依赖
maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
4、The specified Gradle installation directory 'xxx' does not exist.
The specified Gradle installation directory XXX\gradle\gradle-2.14.1 - 简书
修改File -> Setting -> Build,Execution,Deployment -> BuildTools -> Gradle
找到Gradle projects 下面的Gradle -> Use Gradle from -> 下来选择修改为:'gradle-wrapper.properties' file
二、Maven
1、如何本地导入jar包并引用
jar包下载网站:https://mvnrepository.com/,在网站上下载好对应的jar包(或者将自己项目打包成jar包)后,任意路径打开cmd输入如下命令在本地maven仓库中生成对应jar包:
mvn install:install-file -Dfile=C:\Users\xxx\Desktop\xxx.jar -DgroupId=org.xxx -DartifactId=xxx-api -Dversion=1.7.2 -Dpackaging=jar -DgeneratePom=true
DgroupId:是项目组织唯一的标识符,自己随便起名
DartifactId:项目的唯一的标识符,自己可以随便起
Dversion:项目版本
Dfile:jar包路径(绝对路径)
DgeneratePom:是否生成pom文件,ture:生成,false:不生成首次在cmd中执行该命令可能会报错,貌似是缺少相应插件?转到idea中在任一项目的终端命令行中输入该命令会自动下载对应插件,并安装成功,之后便可直接在cmd中以该命令安装本地jar包。
安装好本地jar包后,在项目的pom文件中输入对应的groupId、artifactId、version,即完成本地jar包的导入。
(如果是网上搜不到的第三方包,只能直接放在项目路径下,在idea中手动右键,将该包加入该项目,最好不用maven导入,否则别人引用无法下载)
2、本地打开别人的项目时不能下载jar包
情况:当打开新项目时,pom文件存在,但是idea右侧未显示maven插件,并且jar包不能自动下载;
解决:点击pom.xml,右键选择add Maven Project即可;(另外,打开非本地的项目时,maven环境配置往往不同,需要修改,可在idea中设置默认maven配置-->default settings中设置)
3、Web server failed to start. Port 8080 was already in use.
原因:莫名其妙java.exe占用了8080端口
解决:查找使用8080端口的进程:netstat -ano |findstr 8080
查找进程PID对应的程序名:tasklist |findstr "PID"
查找程序名对应的路径相关信息:wmic process where name="java.exe" get processid,executablepath,name
根据进程名杀掉进程:taskkill /f /t /im java.exe
4、spring-boot-starter-parent下面的版本标红
roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决 - 雾深 - 博客园
如果某一个版本始终拉不下来,可切换成其他版本,再切换回来重试。
5、非springboot的maven项目打包后的jar包没有包含依赖文件
在pom文件中添加:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.demo.HappyChatMain</mainClass> </manifest> </archive> </configuration> <!-- 添加此项后,可直接使用mvn package | mvn install --> <!-- 不添加此项,需直接使用mvn package assembly:single --> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
注意添加<executions>内容,否则不能在右侧的maven中直接点击package打包。
---------------------------------------------
在打包springboot项目时,上述方法仍不能将依赖打入jar包,采用下述方式解决,在pom文件的<build>--><plugins>标签中加入下述:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.upuphone.arcard.demo.DemoApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
三、Idea
1、初始化springboot项目时报404
IDEA 创建springboot失败 报错Request failed with status code 403 - 简书
四、Java
1、@Transactional失效
@Transactional事务失效的6种场景_小毛桃学习猿的博客-CSDN博客_transactional事务不生效的场景还有两种种失效场景:
1、@Transactional注解默认只捕获RuntimeException,如果是其他Exception不会进行捕获,比如SQLException,未捕获则不会进行回滚;需要指定rollbackFor(此时注解在service层)。但 如果注解在controller层,无论rollbackFor 指定与否,亦或指定很小的异常,都会进行拦截。原理尚不晓得。
2、在shiro的realm中引入userService后,该userService上的事务失效,其他配置一切正确。这是因为shiro的realm中的bean创建时间早于spring中事务配置,导致事务失效。解决:将userService换成userDao,或者在引入的userService上再加一个注解@Lazy。
2、Bean中有循环依赖
Spring源码最难问题《当Spring AOP遇上循环依赖》_bugpool的博客-CSDN博客_spring循环依赖aop
Spring的单例对象的初始化主要分为三步:
(1)createBeanInstance:实例化,其实也就是调用对象的构造方法实例化对象
(2)populateBean:填充属性,这一步主要是多bean的依赖属性进行填充
(3)initializeBean:调用spring xml中的init 方法。
从上面讲述的单例bean初始化步骤我们可以知道,循环依赖主要发生在第一、第二部。也就是构造器循环依赖和field循环依赖。
Spring中循环依赖场景有:
(1)构造器的循环依赖(采用@Lazy注解或者setter注入解决)(二)构造器注入导致的循环依赖问题及解决方案 - FCity - 博客园
(2)field属性的循环依赖。(三级缓存解决)三级缓存:
singletonFactories : 单例对象工厂的cache
earlySingletonObjects :提前暴光的单例对象的Cache
singletonObjects:单例对象的cacheprotected Object getSingleton(String beanName, boolean allowEarlyReference) { Object singletonObject = this.singletonObjects.get(beanName); if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) { synchronized (this.singletonObjects) { singletonObject = this.earlySingletonObjects.get(beanName); if (singletonObject == null && allowEarlyReference) { ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName); if (singletonFactory != null) { singletonObject = singletonFactory.getObject(); this.earlySingletonObjects.put(beanName, singletonObject); this.singletonFactories.remove(beanName); } } } } return (singletonObject != NULL_OBJECT ? singletonObject : null); } protected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) { Assert.notNull(singletonFactory, "Singleton factory must not be null"); synchronized (this.singletonObjects) { if (!this.singletonObjects.containsKey(beanName)) { this.singletonFactories.put(beanName, singletonFactory); this.earlySingletonObjects.remove(beanName); this.registeredSingletons.add(beanName); } } }
“A的某个field或者setter依赖了B的实例对象,同时B的某个field或者setter依赖了A的实例对象”这种循环依赖的情况。A首先完成了初始化的第一步,并且将自己提前曝光到singletonFactories中,此时进行初始化的第二步,发现自己依赖对象B,此时就尝试去get(B),发现B还没有被create,所以走create流程,B在初始化第一步的时候发现自己依赖了对象A,于是尝试get(A),尝试一级缓存singletonObjects(肯定没有,因为A还没初始化完全),尝试二级缓存earlySingletonObjects(也没有),尝试三级缓存singletonFactories,由于A通过ObjectFactory将自己提前曝光了,所以B能够通过ObjectFactory.getObject拿到A对象(虽然A还没有初始化完全,但是总比没有好呀),B拿到A对象后顺利完成了初始化阶段1、2、3,完全初始化之后将自己放入到一级缓存singletonObjects中。此时返回A中,A此时能拿到B的对象顺利完成自己的初始化阶段2、3,最终A也完成了初始化,进去了一级缓存singletonObjects中,而且更加幸运的是,由于B拿到了A的对象引用,所以B现在hold住的A对象完成了初始化。
Spring-bean的循环依赖以及解决方式_不穿铠甲的穿山甲的博客-CSDN博客_bean的循环依赖如何解决
3、token验证失败
问题背景:在idea中运行项目在8080端口,用jar包的方式在8081端口再起一个服务;采用shiro+jwt+redis方式验证
问题情况:在8080端口登录后,用该token在8081端口进行访问提示token验证失败(不是超期,是算法签名验证失败);
尝试:在不同路径,起jar包在8082端口,此时,8081与8082端口的token能互用,但不能用于8080端口,证明不是端口或项目运行路径问题;猜测是启动方式问题,根本应该是加密时的secret不同,但是看源码没发现哪里不同,secret、algorithm也打印不出来,暂未找到原因。