Java 运行“mvn端点框架:openApiDocs”时发生ClassNotFoundException`

Java 运行“mvn端点框架:openApiDocs”时发生ClassNotFoundException`,java,maven,google-cloud-platform,google-cloud-endpoints,openapi,Java,Maven,Google Cloud Platform,Google Cloud Endpoints,Openapi,我正处于GCP的下一步,在这一步中,我必须运行maven命令来生成openapi.json文件 我一直在关注我自己的项目,所以这可能是重复的,也可能不是重复的。所以我不会,因为我把我自己的链接在下面 因此,当我运行他们告诉我的命令时,我得到了下面的堆栈跟踪,抱怨他们找不到我的api类,因为它显然存在 C:\Users\*********\Projects\******>mvn端点框架:openApiDocs-e [信息]错误堆栈跟踪已打开。 [信息]正在扫描项目。。。 [信息] [信息]----

我正处于GCP的下一步,在这一步中,我必须运行maven命令来生成openapi.json文件

我一直在关注我自己的项目,所以这可能是重复的,也可能不是重复的。所以我不会,因为我把我自己的链接在下面

因此,当我运行他们告诉我的命令时,我得到了下面的堆栈跟踪,抱怨他们找不到我的api类,因为它显然存在

C:\Users\*********\Projects\******>mvn端点框架:openApiDocs-e [信息]错误堆栈跟踪已打开。 [信息]正在扫描项目。。。 [信息] [信息]------------------- [信息]构建rest 0.0.1-SNAPSHOT [信息]-------------[jar]----------------- [信息] [信息]-端点框架maven插件:2.0.1:openApiDocs default cli@rest-- [信息]端点工具参数:[获取openapi文档,-o,C:\Users\************\Projects\*********\target\openapi docs\openapi.json,-cp,C:\Users\*********\Projects\***************\target\classes;C:\Users\********.m2\repository\org\springframework\boot\spring boot\2.3.0.RELEASE\spring-boot-2.3.0.RELEASE.jar;C:\Users\*****.m2\repository\org\springframework\spring-core\spring.6.C\springore-5.2.6.RELEASE.jar;C:\Users\********.m2\repository\org\springframework\spring jcl\5.2.6.RELEASE\spring-jcl-5.2.6.RELEASE.jar;C:\Users\********.m2\repository\org\springframework\spring context\5.2.6.RELEASE\spring-context-5.2.6.RELEASE.jar;C:\Users\********.m2\repository\springframework\spring\spring-aop\5.2.6.RELEASE\spring.6.jar、 C:\Users\******\.m2\repository\org\springframework\spring beans\5.2.6.RELEASE\spring-beans-5.2.6.RELEASE.jar;C:\Users\***************\.m2\repository\org\springframework\spring expression\5.2.6.RELEASE;C:\Users\*****.m2\repository\org\springframework\boot\spring boot\spring boot autoconfigure\2.3.0.RELEASE\spring boot autoconfigure-2.3.0.RELEASE.jar;C:\Users\********.m2\repository\org\springframework\boot\spring boot starter\2.3.0.RELEASE\spring-boot-starter-2.3.0.RELEASE.jar;C:\Users\*****.m2\repository\org\springframework\boot\spring boot\starter日志记录\2.3.0.RELEASE\spring-boot-starter-logging-2.3.0.RELEASE.jar;C:\Users\*****.m2\repository\ch\logo\logbac1.2.3\logback-1.2.3\logback-1.1.2.3.3.3\logback-1.1.1.1.2.3\logback-1.2.3\1.2.2.2.3\logback-1.2.3\logback-1.3.3\logback-1.3.3.jar;C:\C:\用户用户\-back-1.1.1.1.1.1.2.2.2.1.2.2.2.2.2.3.3\Logbackback-1.3.3\logback-1.3.3.3\logback-1.3.3\logback-1.3.3\logback-1.3.3.3.3\logback-1.1.1.1.3.3\logback-1.1.1.3.3\logback-1.3\使用者s\********.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;C:\Users\**************.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\********.m2\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;C:\Users\***\springstarter data firestore\1.2.3.RELEASE\spring-cloud-gcp-starter-data-firestore-1.2.3.RELEASE.jar;C:\Users\***********.m2\repository\org\springframework\cloud\spring-cloud-gcp-starter\1.2.3.RELEASE\spring-cloud-gcp-starter-1.2.3.RELEASE.jar;C:\Users\********.m2\repository\org\springframework\cloud\spring\spring-cloud-gcp-core\1.2.3-1.2.3.RELEASE.jar;C:\Users\********.m2\repository\com\google\cloud\google cloud core\1.93.4\google-cloud-core-1.93.4.jar;C:\Users\********.m2\repository\com\google\api\grpc\proto-google-iam-v1\0.13.0\proto-google-iam-v1-0.13.0.0.jar;C:\Users\*****.m2\repository\com\google\auth\google-auth-auth-auth-oauth-2-south-2-http-th0-th2-http-0.20.0.jar;C:\Users\*****.m2\repository\org\springframework\cloud\spring cloud gcp autoconfigure\1.2.3.RELEASE\spring-cloud-gcp-autoconfigure-1.2.3.RELEASE.jar;C:\Users\*****.m2\repository\org\springframework\cloud\spring cloud gcp data firestore\1.2.3.RELEASE\spring\spring-cloud-gcp-data-firestore-1.2.3.3.RELEASE.jar;C:\Users\*****.m2\repository\io\projectreactor\reactor core\3.3.5.RELEASE\reactor-core-3.3.5.RELEASE.jar;C:\Users\**************.m2\repository\org\reactivestreams\reactive streams\1.0.3\reactive-streams-1.0.3.jar;C:\Users\***********.m2\repository\com\google\cloud\google-cloud-firestore\1.33.0.jard\google cloud core grpc\1.93.4\google-cloud-core-grpc-1.93.4.jar;C:\Users\********.m2\repository\io\grpc\grpc-core\1.28.1\grpc-core-1.28.jar;C:\Users\*****.m2\repository\com\google\android\annotations\4.1.1.4\annotations-4.1.1.1.4.jar;C:\Users\*****.m2\repository\perfmark\perfmark\api.0\perfmark\0.jar用户。m2\repository\com\google\api\grpc\proto-google-cloud-firestore-admin-v1\1.33.0\proto-google-cloud-firestore-admin-v1-1.33.0.jar;C:\Users\*********\.m2\repository\com\google\api\grpc\proto-google-cloud-firestore-v1\1.33.0\proto-google-cloud-firestore-v1-1.3 3.0.jar;C:\Users\******\.m2\repository\com\google\api\grpc\proto-google-cloud-firestore-v1beta1\0.86.0\proto-google-cloud-firestore-v1beta1-0.86.0.jar;C:\Users\******\.m2\repository\com\google\auto\value\auto-value-annotations\1.7\auto-value-annotations-1.7.jar;C:\Users\******\.m2\repository\io\opencensus\opencensus contrib grpc util\0.24.0\opencensus-contrib-grpc-util-0.24.0.jar;C:\Users\******\.m2\repository\com\google\api\api common\1.9.0\api-common-1.9.0.jar;C:\Users\******\.m2\repository\io\grpc\grpc protobuf\1.28.1\grpc-protobuf-1.28.1.jar;C:\Users\******\.m2\repository\io\grpc\grpc protobuf lite\1.28.1\grpc-protobuf-lite-1.28.1.jar;C:\Users\******\.m2\repository\io\grpc\grpc context\1.28.1\grpc-context-1.28.1.jar;C:\Users\******\.m2\repository\com\google\protobuf\protobuf java\3.11.4\protobuf-java-3.11.4.jar;C:\Users\******\.m2\repository\com\google\api\grpc\proto-google-common-protos\1.17.0\proto-google-common-protos-1.17.0.jar;C:\Users\******\.m2\repository\com\google\api\gax\1.56.0\gax-1.56.0.jar;C:\Users\******\.m2\repository\io\grpc\grpc api\1.28.1\grpc-api-1.28.1.jar;C:\Users\******\.m2\repository\com\google\errorporent\error\u-porent\u-annotations\2.3.4\error\u-porent\u-annotations-2.3.4.jar;C:\Users\******\.m2\repository\org\codehaus\mojo\animal sniffer annotations\1.18\animal-sniffer-annotations-1.18.jar;C:\Users\******\.m2\repository\com\google\api\gax-grpc\1.56.0\gax-grpc-1.56.0.jar;C:\Users\******\.m2\repository\io\grpc\grpc auth\1.28.1\grpc-auth-1.28.1.jar;C:\Users\******\.m2\repository\io\grpc\grpc netty shaded\1.28.1\grpc-netty-shaded-1.28.1.jar;C:\Users\******\.m2\repository\io\grpc\grpc alts\1.28.1\grpc-alts-1.28.1.jar;C:\Users\******\.m2\repository\io\grpc\grpc grpclb\1.28.1\grpc-grpclb-1.28.1.jar;C:\Users\******\.m2\repository\org\conscrypt\conscrypt openjdk uber\2.2.1\conscrypt-openjdk-uber-2.2.1.jar;C:\Users\******\.m2\repository\org\threeten\threetenbp\1.4.3\threetenbp-1.4.3.jar;C:\Users\******\.m2\repository\io\grpc\grpc stub\1.28.1\grpc-stub-1.28.1.jar;C:\Users\******\.m2\repository\io\opencensus\opencensus api\0.24.0\opencensus-api-0.24.0.jar;C:\Users\******\.m2\repository\com\google\auth\google auth-library-credentials\0.20.0\google-auth-library-credentials-0.20.0.jar;C:\Users\******\.m2\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;C:\Users\******\.m2\repository\com\google\protobuf\protobuf java util\3.11.4\protobuf-java-util-3.11.4.jar;C:\Users\******\.m2\repository\javax\annotation\javax.annotation api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\******\.m2\repository\com\google\api\grpc\grpc-google-cloud-firestore-v1\1.33.0\grpc-google-cloud-firestore-v1-1.33.0.jar;C:\Users\******\.m2\repository\org\springframework\data\spring data commons\2.3.0.RELEASE\spring-data-commons-2.3.0.RELEASE.jar;C:\Users\******\.m2\repository\org\springframework\spring tx\5.2.6.RELEASE\spring-tx-5.2.6.RELEASE.jar;C:\Users\******\.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\******\.m2\repository\com\google\endpoints\endpoints framework\2.2.1\endpoints-framework-2.2.1.jar;C:\Users\******\.m2\repository\com\google\guava\guava\20.0\guava-20.0.jar;C:\Users\******\.m2\repository\com\fasterxml\jackson\core\jackson annotations\2.11.0\jackson-annotations-2.11.0.jar;C:\Users\******\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.11.0\jackson-core-2.11.0.jar;C:\Users\******\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.11.0\jackson-databind-2.11.0.jar;C:\Users\******\.m2\repository\com\google\flogger\flogger\0.3.1\flogger-0.3.1.jar;C:\Users\******\.m2\repository\com\google\http client\google-http-client-jackson2\1.25.0\google-http-client-jackson2-1.25.0.jar;C:\Users\******\.m2\repository\com\google\http client\google http client\1.25.0\google-http-client-1.25.0.jar;C:\Users\******\.m2\repository\org\apache\httpcomponents\httpclient\4.5.12\httpclient-4.5.12.jar;C:\Users\******\.m2\repository\org\apache\httpcomponents\httpcore\4.4.13\httpcore-4.4.13.jar;C:\Users\******\.m2\repository\commons codec\commons codec\1.14\commons-codec-1.14.jar;C:\Users\******\.m2\repository\com\google\j2objc\j2objc annotations\1.1\j2objc-annotations-1.1.jar;C:\Users\******\.m2\repository\com\google\api client\google api client\1.25.0\google-api-client-1.25.0.jar;C:\Users\******\.m2\repository\com\google\oauth client\google oauth client\1.25.0\google-oauth-client-1.25.0.jar;C:\Users\******\.m2\repository\com\google\api client\google-api client-appengine\1.25.0\google-api-client-appengine-1.25.0.jar;C:\Users\******\.m2\repository\com\google\oauth client\google oauth client appengine\1.25.0\google-oauth-client-appengine-1.25.0.jar;C:\Users\******\.m2\repository\com\google\oauth client\google oauth client servlet\1.25.0\google-oauth-client-servlet-1.25.0.jar;C:\Users\******\.m2\repository\com\google\http client\google http client jdo\1.25.0\google-http-client-jdo-1.25.0.jar;C:\用户\* *******\.m2\repository\com\google\api client\google api client servlet\1.25.0\google-api-client-servlet-1.25.0.jar;C:\Users\******\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;C:\Users\******\.m2\repository\javax\jdo\jdo2api\2.3-eb\jdo2-api-2.3-eb.jar;C:\Users\******\.m2\repository\javax\transaction\transaction-api\1.1\transaction-api-1.1.jar;C:\Users\********.m2\repository\com\google\http client\google http client appengine\1.25.0\google-http-client-appengine-1.25.0.jar;C:\Users\******\.m2\repository\com\google\code\findbugs\jsr305\3.0.1\jsr305-3.0.1.jar;C:\Users\******\.m2\repository\commons fileupload\commons fileupload\1.3.3\commons-fileupload-1.3.3.jar;C:\Users\******\.m2\repository\commons io\commons io\2.2\commons-io-2.2.jar;C:\Users\******\.m2\repository\io\swagger\swagger models\1.5.9\swagger-models-1.5.9.jar;C:\Users\******\.m2\repository\io\swagger\swagger annotations\1.5.9\swagger-annotations-1.5.9.jar;C:\Users\******\.m2\repository\io\swagger\swagger-core\1.5.9\swagger-core-1.5.9.jar;C:\Users\******\.m2\repository\org\apache\commons\commons-lang3\3.10\commons-lang3-3.10.jar;C:\Users\******\.m2\repository\com\fasterxml\jackson\datatype\jackson datatype joda\2.11.0\jackson-datatype-joda-2.11.0.jar;C:\Users\******\.m2\repository\joda time\joda time\2.9.9\joda-time-2.9.9.jar;C:\Users\******\.m2\repository\com\fasterxml\jackson\dataformat\jackson dataformat yaml\2.11.0\jackson-dataformat-yaml-2.11.0.jar;C:\Users\******\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\******\.m2\repository\org\slf4j\slf4j-nop\1.7.30\slf4j-nop-1.7.30.jar;C:\Users\******\.m2\repository\com\google\endpoints\endpoints管理控制appengine all\1.0.12\endpoints-management-control-appengine-all-1.0.12.jar;C:\Users\******\.m2\repository\com\google\appengine\appengine-api-1.0-sdk\1.9.80\appengine-api-1.0-sdk-1.9.80.jar;C:\Users\******\.m2\repository\javax\inject\javax.inject\1\javax.inject-1.jar;C:\Users\******\.m2\repository\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar;C:\Users\*********\Projects\******\target\classes,-w,C:\Users\*********\Projects\******\src\main\webapp,-h,course-gen.appspot.com] [信息]------------------------------------ [信息]生成失败 [信息]------------------------------------ [信息]总时间:2.725秒 [信息]完成时间:2020-06-08T15:59:58-04:00 [信息]------------------------------------ [错误]无法执行目标com.google.cloud.tools:endpoints framework maven plugin:2.0.1:openApiDocs项目rest上的默认cli:endpoints工具错误:xyz.*********.rest.CourseApi->[帮助1] org.apache.maven.lifecycle.LifecycleExecutionException:未能执行目标com.google.cloud.tools:端点框架maven插件:2.0.1:openApiDocs项目rest上的默认cli:端点工具错误 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:215 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:156 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:148 位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject LifecycleModuleBuilder.java:117 位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject LifecycleModuleBuilder.java:81 位于org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build SingleThreadedBuilder.java:56 位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute LifecycleStarter.java:128 位于org.apache.maven.DefaultMaven.doExecute DefaultMaven.java:305 位于org.apache.maven.DefaultMaven.doExecute DefaultMaven.java:192 在org.apache.maven.DefaultMaven.executedefaultmaven.java:105 在org.apache.maven.cli.MavenCli.execute MavenCli.java:957 位于org.apache.maven.cli.MavenCli.doMain MavenCli.java:289 位于org.apache.maven.cli.MavenCli.main MavenCli.java:193 在jdk.internal.reflect.NativeMethodAccessorImpl.invoke0本机方法中 在jdk.internal.reflect.NativeMethodAccessorImpl.invoke NativeMethodAccessorImpl.java:62 在jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke DelegatingMethodAccessorImpl.java:43 位于java.lang.reflect.Method.invoke Method.java:567 位于org.codehaus.plexus.classworlds.launcher.launchEnhanced launcher.java:282 位于org.codehaus.plexus.classworlds.launcher.launcher.launcher.java:225 位于org.codehaus.plexus.classworlds.launcher.launcher.main和exitcode launcher.java:406 位于org.codehaus.plexus.classworlds.launcher.launcher.main launcher.java:347 原因:org.apache.maven.plugin.MojoExecutionException:端点工具错误 在com.google.cloud.tools.maven.endpoints.framework.OpenApiDocsMojo.execute OpenApiDocsMojo.java:98 位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo DefaultBuildPluginManager.java:137 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:2 10 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:156 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:148 位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject LifecycleModuleBuilder.java:117 位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject LifecycleModuleBuilder.java:81 位于org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build SingleThreadedBuilder.java:56 位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute LifecycleStarter.java:128 位于org.apache.maven.DefaultMaven.doExecute DefaultMaven.java:305 位于org.apache.maven.DefaultMaven.doExecute DefaultMaven.java:192 在org.apache.maven.DefaultMaven.executedefaultmaven.java:105 在org.apache.maven.cli.MavenCli.execute MavenCli.java:957 位于org.apache.maven.cli.MavenCli.doMain MavenCli.java:289 位于org.apache.maven.cli.MavenCli.main MavenCli.java:193 在jdk.internal.reflect.NativeMethodAccessorImpl.invoke0本机方法中 在jdk.internal.reflect.NativeMethodAccessorImpl.invoke NativeMethodAccessorImpl.java:62 在jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke DelegatingMethodAccessorImpl.java:43 位于java.lang.reflect.Method.invoke Method.java:567 位于org.codehaus.plexus.classworlds.launcher.launchEnhanced launcher.java:282 位于org.codehaus.plexus.classworlds.launcher.launcher.launcher.java:225 位于org.codehaus.plexus.classworlds.launcher.launcher.main和exitcode launcher.java:406 位于org.codehaus.plexus.classworlds.launcher.launcher.main launcher.java:347 原因:java.lang.ClassNotFoundException:xyz.*********.rest.api.CourseApi 位于java.net.URLClassLoader.findClass URLClassLoader.java:436 位于java.lang.ClassLoader.loadClass ClassLoader.java:588 位于java.lang.ClassLoader.loadClass ClassLoader.java:521 位于com.google.api.server.spi.tools.GetOpenApiDocAction.loadClasses GetOpenApiDocAction.java:139 位于com.google.api.server.spi.tools.GetOpenApiDocAction.genOpenApiDoc GetOpenApiDocAction.java:111 在com.google.api.server.spi.tools.GetOpenApiDocAction.execute GetOpenApiDocAction.java:82 位于com.google.api.server.spi.tools.EndpointsTool.execute EndpointsTool.java:84 在com.google.cloud.tools.maven.endpoints.framework.OpenApiDocsMojo.execute OpenApiDocsMojo.java:95 位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo DefaultBuildPluginManager.java:137 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:210 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:156 位于org.apache.maven.lifecycle.internal.MojoExecutor.execute MojoExecutor.java:148 位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject LifecycleModuleBuilder.java:117 位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject LifecycleModuleBuilder.java:81 位于org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build SingleThreadedBuilder.java:56 位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute LifecycleStarter.java:128 位于org.apache.maven.DefaultMaven.doExecute DefaultMaven.java:305 位于org.apache.maven.DefaultMaven.doExecute DefaultMaven.java:192 在org.apache.maven.DefaultMaven.executedefaultmaven.java:105 在org.apache.maven.cli.MavenCli.execute MavenCli.java:957 位于org.apache.maven.cli.MavenCli.doMain MavenCli.java:289 位于org.apache.maven.cli.MavenCli.main MavenCli.java:193 在jdk.internal.reflect.NativeMethodAccessorImpl.invoke0本机方法中 在jdk.internal.reflect.NativeMethodAccessorImpl.invoke NativeMethodAccessorImpl.java:62 在jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke DelegatingMethodAccessorImpl.java:43 位于java.lang.reflect.Method.invoke Method.java:567 位于org.codehaus.plexus.classworlds.launcher.launchEnhanced launcher.java:282 位于org.codehaus.plexus.classworlds.launcher.launcher.launcher.java:225 位于org.codehaus.plexus.classworlds.launcher.launcher.main和exitcode launcher.java:406 位于org.codehaus.plexus.classworlds.launcher.launcher.main launcher.java:347 [错误] [错误]使用-X开关重新运行Maven以启用完整调试日志记录。 [错误] [错误]有关错误和可能的解决方案的更多信息,请阅读以下文章: [错误][帮助1]http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException IntelliJ将其识别为路径,并在我移动它时自动对其进行重构。相关路径在web.xml中定义。servlet->init param->param值

web.xml

端点服务器 com.google.api.server.spi.EndpointsServlet 服务 xyz.********.rest.api.CourseApi 端点服务器 /_空气污染指数/* index.html 端点api配置 com.google.api.control.ServiceManagementConfigFilter 端点api控制器 com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter 端点投影 ${endpoints.project.id} endpoints.serviceName ${endpoints.project.id}.appspot.com 端点api配置 端点服务器 端点api控制器 端点服务器
编辑:找到答案了

答案很简单-mvn端点框架:openApiDocs只看到由mvn包构建的存储库的最新版本,我假设它在target或其他版本中

因此,我更新了代码,但从未重新运行过mvn包,这就是为什么找不到该类的原因