::: 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
替换为了自定义的源。然后重新打包就可以看到令人欣慰的:
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"
这里的报错有很多原因,详见:
- https://www.jb51.net/server/323067lts.htm
- 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