视频类的网站制作,临沂网站建设小程序,全世界做会展介绍的网站排名,网页设计模板word文章目录工件列表工件类型添加工件部署项目exploded 工件的部署war 工件的部署手动部署项目war 包部署exploded 部署部署有关的操作deploy/redeploy#xff08;部署/重新部署#xff09;rerun/run#xff08;重启服务器/启动服务器#xff09;Update resources#xff08;…
文章目录工件列表工件类型添加工件部署项目exploded 工件的部署war 工件的部署手动部署项目war 包部署exploded 部署部署有关的操作deploy/redeploy部署/重新部署rerun/run重启服务器/启动服务器Update resources更新静态资源Update classes and resources更新字节码文件和静态资源汇总注本文中的 IDE 是 IntelliJ IDEA for Mac。
工件列表
部署项目之前你要先添加有关 Web 工程的工件Artifact其实在创建 Java Web Module 的时候 IDEA 会自动添加模块的 Artifact。
注这个 Web 工程其实是 IDEA Project 中的一个模块Module而已。 注意 以 exploded 工件部署项目后再把 exploded 工件删除了再次部署项目时会将部署用的 xml 配置文件删除最终部署失败。但是工件输出目录下的部署包存在。
以 war 工件部署项目后再把 war 工件删除了再次部署项目时最终部署失败但是工件输出目录下的 war文件以及 webapps 下的部署包都存在。
以 war 工件部署项目后再把 exploded 工件删除了再次部署项目时会将工件输出目录下的 war 文件删除最终部署失败。但是 webapps 目录下的部署包存在。
工件类型
war表示 IDEA 会将项目按 web 服务的目录结构生成一个部署包然后打成 war 包存放在指定的输出目录下 war exploded表示 IDEA 会将项目按 web 服务的目录结构生成一个部署包直接存放在指定的输出目录下不会将部署包打成 war 包
添加工件
工件是依赖于项目产生的所以添加工件的时候你需要选择对应的项目模块。而且添加项目工件时必须先添加 Exploded 类型的工件才能添加 war 类型的工件。 添加了某个项目的 Exploded 类型的工件后你才能添加该项目的 Archive 类型的工件
部署项目
添加了项目的工件构建方式后在 tomcat 的 deployment 中就可以选择添加了如下图所示 服务器配置中若 deployment 没有添加任何工件会显示一个红色 ×。
exploded 工件的部署
若你选择的是 exploded 项目工件IDEA 会根据工件类型来构建工件也就是构建部署包构建的部署包会存放在指定输出目录下/Users/liaowenxiong/Documents/IdeaProjects/java-exercises/out/artifacts不会打成 war 包也不会存放在 tomcat 的 webapps 目录下
接着会生成一个 xml 配置文件这个 xml 文件以虚拟目录命名存放在 IDEA 一个特定的目录下/Users/liaowenxiong/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/0e0b39f5-0ff8-4713-ab72-81b276953084/conf/catalina/localhost。在这个文件中配置标签 Context 的 docBase 属性的值而这个属性值就是部署包的路径。
注意 1.以 exploded 工件部署的把工件列表中的 exploded 工件删除了再次部署时会删除 conf/catalina/localhost目录下的 xml 文件导致部署失败。但是删除 war 工件不会影响 exploded 工件的部署。 2.将 tomcat 配置文件下的 deployment 相关部署工件删除再次部署的时候会删除 conf/catalina/localhost目录下的 xml 文件导致部署失败。 war 工件的部署
如果你选择的是 war 工件那么 IDEA 会根据 web 服务的目录结构生成部署包然后打成 war 包war 包会存放在指定的工件输出目录下
接着会生成一个 xml 配置文件这个 xml 文件以虚拟目录命名存放在 IDEA 一个特定的目录下/Users/liaowenxiong/Library/Caches/JetBrains/IntelliJIdea2020.3/tomcat/0e0b39f5-0ff8-4713-ab72-81b276953084/conf/catalina/localhost。在这个文件中配置标签 Context 的 docBase 属性的值而这个属性值就是 war 文件的路径。
接着 tomcat 会去解析 xml 文件发现是 war 文件则会将 war 包解压到服务器的 webapps 目录下而且解压后的目录根据 Applicaiton context URL 的名称来命名。部署就完成了。
注意 1.以 war 工件部署的把工件列表中的 exploded 工件删除再次部署时失败且工件输出目录下的 war 包会被删除conf/catalina/localhost 下的 xml 文件也会被删除。但是 webapps 目录的部署包依旧存在我们此时通过命令终端启动服务器后项目可以照常访问但是通过 IDEA 启动的 tomcat 要停止掉。
2.以 war 工件部署的把工件列表中的 war 工件删除再次部署时失败conf/catalina/localhost 下的 xml 文件会被删除但是工件输出目录下的 war 包和 webapps 下的部署包依旧存在我们此时通过命令终端启动服务器后项目可以照常访问但是通过 IDEA 启动的 tomcat 要停止掉。
3.将 tomcat 配置文件下的 deployment 相关部署工件删除再次部署失败且会删除 conf/catalina/localhost目录下的 xml 文件。但是工件输出目录下的 war 文件和 webapps 目录下的部署包依旧存在。但是无法正常访问项目。有趣的是这个 xml 文件其实和部署 war 工件没有关系在删除了 xml 文件的情况下只要确保 webapps 目录下有项目的部署包我们此时通过命令终端启动服务器后项目可以照常访问但是通过 IDEA 启动的 tomcat 要停止掉。
手动部署项目
这里的手动部署项目是指不借助 IDEA 等开发工具来启动 tomcat 和部署项目。
war 包部署
1.使用工具生成部署包或者自己根据 web 服务的目录结构生成一份部署包然后打成 war 包
2.接着把 war 包放置在某个目录下通常是放在项目的 /out/artifacts/ 目录下或者放在模块根目录下的 target/ 目录下
3.接着你要在 /Users/liaowenxiong/Applications/apache-tomcat-8.5.73/conf/Catalina/localhost 目录下创建一个以虚拟目录命名的 xml 文件文件中的标签 Context 的属性 docBase 的值设为 war 文件的路径如下所示
Context path/servlet_demo docBase/Users/liaowenxiong/Documents/IdeaProjects/java-exercises/out/artifacts/servlet_demo_war/servlet-demo_war.war /xml 文件配置好之后启动 tomcattomcat 会自动找到 war 文件并将其释放到 webapps 目录下。
特别说明 tomcat 有个监听器这个监听器会定时解析 conf/Catalina/localhost 目录下的 xml 文件发现 xml 文件中的 Context/ 的 docBase 属性保存的是 war 文件的路径就会自动将其释放到 webapps 目录下如果 webapps 目录下已经存在该目录则不会释放。
注意 war 这种部署方式实际上只是通过 xml 文件来告诉 tomcat war 文件的位置让 tomcat 找到 war 文件然后将其释放到 webapps 目录下。所以这种部署真正起作用的是把部署包放置在 tomcat 的webapps 目录下就已经完成部署了。xml 文件是可以不需要的war 包也是可以不需要的。
exploded 部署
1.使用工具生成部署包或者自己根据 web 服务的目录结构生成一份部署包 2.接着把部署包放置在某个目录下通常是放在项目的 /out/artifacts/ 目录下或者放在模块根目录下的 target/ 目录下 3.接着你要在 /Users/liaowenxiong/Applications/apache-tomcat-8.5.73/conf/Catalina/localhost 目录下创建一个以虚拟目录命名的 xml 文件文件中的标签 Context 的属性 docBase 的值设为部署包的路径如下所示
Context path/servlet_demo docBase/Users/liaowenxiong/Documents/IdeaProjects/java-exercises/out/artifacts/servlet_demo_war_exploded /这样就部署完成了启动服务器就可以正常访问了。
部署有关的操作
deploy/redeploy部署/重新部署
部署前会先构建项目和构建工件部署包如果已经构建过工件则会检测编译输出目录及webapp目录的文件是否有变动有的话则会更新部署包相关的文件。没有变动过则不会更新。
1.如果Java代码修改过会更新编译输出目录默认是 target/classes下的字节码文件也会更新部署包中的字节码文件 2.开发项目中新增 Java 文件无论复制新增还是正常新建会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件 3.开发项目中删除 Java 文件会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件 4.resources 目录下的资源文件新增了分为两种情况如果是正常创建的文件会更新到编译输出目录下也会更新到部署包中的 classes 目录下如果是复制新增的文件则不会
5.resources 目录下的资源文件删除了会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件
6.resources 目录下的资源文件修改了会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件
7.resources 目录下的子目录删除了编译输出目录的相关目录也会删除但是部署包中的 classes 目录下的相关子目录会保留只是内容清空了
8.webapp 目录下的静态资源文件修改过会更新部署包中的相关文件 9.webapp 目录下的静态资源文件删除了会更新部署包中的相关文件 10.webapp 目录下的静态资源文件新增了分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中
rerun/run重启服务器/启动服务器
启动服务器后会自动部署项目前提是已经在 tomcat 的配置文件中的 Deployment 添加部署工件如果已经部署过则会重新部署项目。启动服务器触发的部署和重新部署其实和手动触发 deploy/redeploy 效果相同。
1.如果Java代码修改过会更新编译输出目录默认是 target/classes下的字节码文件也会更新部署包中的字节码文件 2.开发项目中新增 Java 文件不论是复制新增还是正常新建会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件 3.开发项目中删除 Java 文件会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件
4.resources 目录下的资源文件新增了分为两种情况如果是正常创建的文件会更新到编译输出目录下也会更新到部署包中的 classes 目录下如果是复制新增的文件则不会。
另外新增的空目录不会更新到编译输出目录下也不会更新到部署包中复制新增的目录即使目录含有文件也不会更新到编译输出目录下也不会更新到部署包中
5.resources 目录下的资源文件删除了会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件
6.resources 目录下的资源文件修改了会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件
7.resources 目录下的子目录删除了编译输出目录的相关目录也会删除但是部署包中的 classes 目录下的相关子目录会保留只是内容清空了
8.webapp 目录下的静态资源文件修改过会更新部署包中的相关文件 9.webapp 目录下的静态资源文件删除了会更新部署包中的相关文件 10.webapp 目录下的静态资源文件新增了分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中
Update resources更新静态资源
1.Java 文件的修改、新增、删除都不会更新到部署包中在 run 和 debug 模式下
2.resources 目录的资源文件新增了分为两种情况如果是复制新增的文件则不会更新到部署包中也不会更新到编译输出目录下如果是正常新建的文件则会更新到部署包中也会更新到编译输出目录下在 run 和 debug 模式下
3.resources 目录下的资源文件删除了不会更新部署包中的相关文件但是会更新编译输出目录下的相关文件在 run 和 debug 模式下
4.resources 目录下的资源文件修改了会更新部署包中的相关文件也会更新编译输出目录下的相关文件在 run 和 debug 模式下
5.webapp 目录下的静态资源文件修改了会更新部署包中的相关文件在 run 和 debug 模式下 6.webapp 目录下的静态资源文件删除了不会更新部署包中的相关文件在 run 和 debug 模式下 7.webapp 目录下的静态资源文件新增了分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中在 run 和 debug 模式下
Update classes and resources更新字节码文件和静态资源
1.Java 文件的修改在 run 模式或者 debug 模式下会更新编译输出目录下的相关字节码文件也会更新部署包中的相关字节码文件。但是在run模式下只是更新了部署包中的字节码文件而已如果这个类已经加载进入内存中了内存中的 Class 对象还是旧的所以执行的代码并没有更新。但是在 debug 模式下不仅会更新部署包中的相关字节码文件还会更新内存中的 Class 对象所以执行的是最新的代码。
2.Java 文件的新增正常新建或者复制新增在 run 模式或者 debug 模式下会更新到编译输出目录下也会更新到部署包中
3.Java 文件的删除在 run 模式或者 debug 模式下会更新编译输出目录下的相关字节码文件也会更新部署包中的相关字节码文件。但是在 run 模式下只是把部署包中的相关字节码文件删除了但是已经加载入内存的类对应的 Class 对象并没有被释放依旧在内存中所以你依旧可以照常访问相关的资源而在 debug 模式下则会把已经加载入内存的类所对应的 Class 对象释放掉你无法再访问有关的资源。
4.resources 目录的资源文件新增了分为两种情况如果是复制新增的文件在 run 模式或 debug 模式下都不会更新到部署包中也不会更新到编译输出目录中如果是正常新建的文件在 run 模式或 debug 模式下都会更新到部署包中也会更新到编译输出目录中
5.resources 目录下的资源文件删除了不会更新部署包中的相关文件但是会更新编译输出目录下的相关文件在 run 和 debug 模式下
6.resources 目录下的资源文件修改了会更新部署包中的相关文件也会更新编译输出目录下的相关文件在 run 和 debug 模式下
7.webapp 目录下的静态资源文件修改了会更新部署包中的相关文件在 run 和 debug 模式下
8.webapp 目录下的静态资源文件删除了不会更新部署包中的相关文件在 run 和 debug 模式下
9.webapp 目录下的静态资源文件新增了分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中在 run 和 debug 模式下
汇总
-deploy/redeployrun/rerunUpdate resourcesUpdate classes and resourcesBuild ModuleRebuild ModuleJava 文件的修改会更新编译输出目录默认是 target/classes下的字节码文件也会更新部署包中的字节码文件会更新编译输出目录默认是 target/classes下的字节码文件也会更新部署包中的字节码文件不会更新到部署包中在 run 和 debug 模式下在 run 模式或者 debug 模式下会更新编译输出目录下的相关字节码文件也会更新部署包中的相关字节码文件。但是在run模式下只是更新了部署包中的字节码文件而已如果这个类已经加载进入内存中了内存中的 Class 对象还是旧的所以执行的代码并没有更新。但是在 debug 模式下不仅会更新部署包中的相关字节码文件还会更新内存中的 Class 对象所以执行的是最新的代码。会更新编译输出目录通常是 target/classes的相关字节码文件。会更新编译输出目录通常是 target/classes的相关字节码文件。Java 文件的删除会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件不会更新到部署包中在 run 和 debug 模式下在 run 模式或者 debug 模式下会更新编译输出目录下的相关字节码文件也会更新部署包中的相关字节码文件。但是在 run 模式下只是把部署包中的相关字节码文件删除了但是已经加载入内存的类对应的 Class 对象并没有被释放依旧在内存中所以你依旧可以照常访问相关的资源而在 debug 模式下则会把已经加载入内存的类所对应的 Class 对象释放掉你无法再访问有关的资源。会更新编译输出目录通常是 target/classes的相关字节码文件。会更新编译输出目录通常是 target/classes的相关字节码文件Java 文件的新增无论复制新增还是正常新建 Java 文件会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件无论复制新增还是正常新建 Java 文件会更新编译输出目录下的字节码文件也会更新部署包中的字节码文件不会更新到部署包中在 run 和 debug 模式下无论复制新增还是正常新建 Java 文件在 run 模式或者 debug 模式下会更新到编译输出目录下也会更新到部署包中无论复制新增还是正常新建的 Java 文件都会更新到编译输出目录下无论复制新增还是正常新建的 Java 文件都会更新到编译输出目录下resources 目录下的文件修改会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件会更新部署包中的相关文件也会更新编译输出目录下的相关文件在 run 和 debug 模式下会更新部署包中的相关文件也会更新编译输出目录下的相关文件在 run 和 debug 模式下会更新编译输出目录通常是 target/classes的相关文件。会更新编译输出目录通常是 target/classes的相关文件。resources 目录下的文件删除会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件会更新到编译输出目录下的相关文件也会更新部署包中的 classes 目录下的相关文件不会更新部署包中的相关文件但是会更新编译输出目录下的相关文件在 run 和 debug 模式下不会更新部署包中的相关文件但是会更新编译输出目录下的相关文件在 run 和 debug 模式下会更新编译输出目录通常是 target/classes的相关文件会更新编译输出目录通常是 target/classes的相关文件resources 目录下的文件新增分为两种情况如果是正常创建的文件会更新到编译输出目录下也会更新到部署包中的 classes 目录下如果是复制新增的文件则不会更新到编译输出目录下也不会更新到部署包中分为两种情况如果是正常创建的文件会更新到编译输出目录下也会更新到部署包中的 classes 目录下如果是复制新增的文件则不会更新到编译输出目录下也不会更新到部署包中分为两种情况如果是复制新增的文件则不会更新到部署包中也不会更新到编译输出目录下如果是正常新建的文件则会更新到部署包中也会更新到编译输出目录下在 run 和 debug 模式下分为两种情况如果是复制新增的文件则不会更新到部署包中也不会更新到编译输出目录下如果是正常新建的文件则会更新到部署包中也会更新到编译输出目录下在 run 和 debug 模式下如果是复制新增的文件Build Module 不会更新到编译输出目录下如果是正常新增的文件Build Module 会更新到编译输出目录下无论是复制新增还是正常新建的文件都会更新到编译输出目录下webapp 目录下的文件修改会更新部署包中的相关文件会更新部署包中的相关文件会更新部署包中的相关文件在 run 和 debug 模式下会更新部署包中的相关文件在 run 和 debug 模式下webapp 目录下的文件删除会更新部署包中的相关文件会更新部署包中的相关文件不会更新部署包中的相关文件在 run 和 debug 模式下不会更新部署包中的相关文件在 run 和 debug 模式下webapp 目录下的文件新增分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中在 run 和 debug 模式下分为两种情况如果是复制新增的文件则不会更新到部署包中如果是正常新建的文件则会更新到部署包中在 run 和 debug 模式下