::: hljs-right DATE: October 17, 2024 :::

Maven的启动

基于SSM,有可能是Spring-boot,也有可能是基于Spring MVC的,所以Maven的启动命令不都是mvn spring-boot:run,使用Spring MVC的话,需要外部Tomcat服务器,并且需要手动将WAR包部署到Tomcat服务器上。 <br> 如果是前者,可以直接运行mvn spring-boot:run,Spring Boot默认内嵌了Tomcat、Jetty或Undertow服务器,因此你不需要单独安装和配置外部服务器。 <br> 具体区分的话,可以查看pom.xml中包含spring-boot-starter-web依赖。

基于Spring MVC的启动方法

项目构建

进入项目根目录(包含pom.xml文件的目录),执行以下命令,

mvn clean package

将会清理之前的构建结果并打包项目,生成一个WAR文件,通常位于target目录下,例如target/xxx.war。

部署到Tomcat

将生成的WAR包部署到Tomcat服务器的webapps目录下。

启动Tomcat

./startup.sh  # 在Linux或macOS上
startup.bat  # 在Windows上

访问项目

http://localhost:8080/xxx

停止Tomcat

./shutdown.sh  # 在Linux或macOS上
shutdown.bat  # 在Windows上

坑们

JDK和Maven版本相关问题

好吧,小菜鸡运行

mvn clean package

运行了一晚上,一直报错

读取C:\Users\xxx\.m2\repository\org\aspectj\aspectjweaver\1.8.8\aspectjweaver-1.8.8.jar时出错; Invalid CEN header (invalid zip64 extra data field size) 
[ERROR] 不再支持源选项 7。请使用 8 或更高版本。 
[ERROR] 不再支持目标选项 7。请使用 8 或更高版本。

这里是jdk版本的问题,可以去查看pom.xml文件末尾的<configuration>字段

<configuration>
		<source>1.7</source>
		<target>1.7</target>
</configuration>

这里的jdk版本是1.7就需要使用对应的jdk版本,值得注意的是Maven的版本同样对jdk版本有要求,此时需要前往 http://maven.apache.org/docs/history.html Maven和jdk的对应关系。 此处感谢:https://blog.csdn.net/JinKin_OldWang/article/details/86190204 这里不匹配出现的报错为:

C:\Users\lenovo>mvn -version
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401)
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
        at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

另外Maven版本降低可不是在pom.xml文件中修改<version>字段,而是要重新下载Maven配置环境变量的。(给忘记了,折腾好久)。

Maven 镜像修改

报错:

[ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central 
(https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version -> [Help 1]

这里的报错可以通过修改国内镜像解决, 首先找到D:\maven\maven-3.6.0\conf\settings.xml,这里是maven的最终安装路径,也就是环境变量中的路径,也可以直接在pom.xml文件中修改,但我的版本太多老旧,似乎并不支持。

需要将如下部分

    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

加入到settings.xml文件中,

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
此处
<mirrors>

这里是将原来的central替换为了自定义的源。然后重新打包就可以看到令人欣慰的: image.png

Tomcat start.bat运行报错
Using CATALINA_BASE:   "D:\apache-tomcat-10.1.31"
Using CATALINA_HOME:   "D:\apache-tomcat-10.1.31"
Using CATALINA_TMPDIR: "D:\apache-tomcat-10.1.31\temp"
Using JRE_HOME:        "D:\java\jdk7"
Using CLASSPATH:       "D:\apache-tomcat-10.1.31\bin\bootstrap.jar;D:\apache-tomcat-10.1.31\bin\tomcat-juli.jar"

这里的报错有很多原因,详见:

  1. https://www.jb51.net/server/323067lts.htm
  2. https://blog.51cto.com/u_15912723/9583217
Tomcat与JDK版本需匹配

参考:https://tomcat.apache.org/whichversion.html

这里我一直有各种报错,

错误1:
The web application [] registered the JDBC driver [] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 

这里根据pom.xml最终tomcat的版本,重新装了tomcat

		<dependency>
		    <groupId>org.apache.tomcat.embed</groupId>
		    <artifactId>tomcat-embed-core</artifactId>
		    <version>9.0.29</version>
		</dependency>
错误2:
Illegal access: this web application instance has been stopped already.

这里是由于启动了多个示例,记得每次尝试完,运行shutdown.bat

错误3:
registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

这里是mysql数据库的问题,最终重启mysql解决

net stop MySQL57
net start MySQL57