情况

cas单点登录

cas server 源码部署tomcat运行报错

把cas server的代码下载下来后使用gradle插件或者maven插件以及转化成eclipse·后导入发现部署到tomcat中会报错ClassNotFoundException。

我的是CasEnvironmentContextListener ,查了下资料 发现也有人遇到 Java.lang.ClassNotFoundException:org.jasig.cas.web.init.SafeContextLoaderListener。

严重: Error configuring application listener of class org.apache.catalina.deploy.ApplicationListener@34f14c84
java.lang.ClassNotFoundException: org.jasig.cas.CasEnvironmentContextListener

然后看了下tomcat中webapp下cas文件夹的文件发现 lib包中没有把引用的子项目加载进去。src文件中也没有子项目的编译文件。

单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo-LMLPHP

单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo-LMLPHP

单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo-LMLPHP

解决方法

推荐方案二,毕竟方案一不方便调试。

方案一使用gradle命令或者maven命令在cmd中打成war包

使用gradle命令或者maven命令在cmd中打成war后再启动tomcat发现解压出来的文件夹中lib文件夹是包含需要的子项目的。

gradle项目只要.classpath文件中有

<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>

maven项目只要.classpath文件中有

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>

在cmd中使用命令就可以进行build 得到war包,这样的war包解压出来在lib中是有子项目的jar包的。

但是war包需要手动放到tomcat的webapp路径下然后运行tomcat,很不方便,也不方便调试。

也可以在tomcat的配置文件中直接指定war包,在tomcat server.xml中,如下:

<Context path="/mango" privileged="true" reloadable="true" docBase="E:\MyEclipse_Professional_2014\GradleSpringMVCMango\build\libs\GradleSpringMVCMango-1.0.war"></Context>

这样就不需要每次都手动复制粘贴到webapp文件夹中了,直接启动tomcat即可,但还是不方便调试。

方案二添加子项目的发布引用

我们最常用的开发方式是在myeclipse中直接采取add deployment的方式,start tomcat即可。

但是cas项目采用add方式,项目依赖的jar没有放进tomcat中,进行如下设置即可。

这种情况是没对子项目的输出路径做设置导致的。

右键点击工程,属性(properties),选择deployment assembly选项,单击add按钮,如下图:

单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo-LMLPHP

单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo-LMLPHP

单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo-LMLPHP

添加之后 有路径有输出包名才算正确的路径,这样再在tomcat中加载部署一次就会发现已经有缺少的子项目的编译文件。

详情可参考:

java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误

myeclipse中创建gradle web项目

【使用指南】MyEclipse部署配置(多图)

注意--很重要

引用的子项目的包本身不能有明显的代码错误,在myeclipse中不能带感叹号等。否则添加了引用之后还是会报找不到该class,因为这个子项目没有编译成功。

初次引入cas-server项目比较常见的需要解决的感叹号情况是

A cycle was detected in the build path of project

解决方法参考:

单点登录(六)-----遇到问题-----cas server 源码部署导入gradle后有感叹号---错误信息A cycle was detected in the build path of pr

注意

引用的子项目的包本身不能有明显的代码错误,在myeclipse中不能带感叹号等。否则添加了引用之后还是会报找不到该class,因为这个子项目没有编译成功。

04-16 14:40