【转载备】更新整个maven工程及相关底层并再运行的记录
来源:互联网 发布:amd cpu测试软件 编辑:程序博客网 时间:2024/06/08 02:43
前言:本例我们的需求其实只是改一个SQL,从昨天上午开始工作,直到昨晚下班前才搞定。只是一个SQL,而且只是加了个条件。
整了一天,这么长的时间只解决了一个这,需要好好反思下。接下来对12月22日这不堪回首的一天进行简单记录。
1.【修改SQL】
本例的需求是修改SQL,所以先说在修改中遇到的问题。
就一个问题:字段名的问题。
修改过的SQL多了一个选择的条件,还修改了很多选择出来的字段的自定义名。
报的错就是,另外一个SQL使用的时候提示不存在某字段。后来更改到和以前一样就OK了。
所以自定义字段名虽然对本SQL的运行没有影响,但放到整个项目中,自定义名可能在别的地方用到了。即,可以根据需求修改自定义名!
因为,不会对功能造成影响。
【修改的技巧】
这里提一点修改的技巧问题。我们修改代码,特别是SQL的时候,往往变动不会太大。
所以执行Team与资源库同步的操作,会知道自己改了哪儿。比较清晰。
话说回来了,修改修改,对比原来的东西进行修改,本来就理所当然。
盲目的复制粘贴不是正常人修改的逻辑,就跟改病句一样,也是看着原来的进行修改。哪有看一遍就删掉去修改的,是不是傻!
2. 【更新工程】
【更新的必要】
蓝后台的工程很久没有用过了,所以需要更新。
本工程,以及相关底层,都需要更新。
这里提出一个需要注意的地方:【注意】更改工程的时候,先要更新!一定!先要更新!
【更新的过程】
此次我们脑子抽了,先把蓝后台的整个工程更新了!其实没有必要,只需要更新SQL-MAP就可以了。
嘛,也没事,以后也省点事儿。其实,讲真,虽然每次更改前更新整个工程并没有必要,但还是需要定时更新一下的。
接下来说更新整个工程的过程以及遇到的问题。
第一步:更新本工程即相关底层的工程
右键本工程相关的所有项目,Team选择更新。
第二步:对底层进行clean以及打包。
maven工程依赖了很多底层项目。这些底层项目是我们的主项目的基础。
更新以后,还需要将所有的这些底层项目进行maven clean然后再maven install。
maven clean:该操作的效果是清楚项目target目录下的所有文件。
maven install:该操作是将本项目进行重新打包。
第三步:对主项目重新build。
底层项目的maven install是将它自己打包,主项目的maven build是把自己的依赖项目打的包引进来,然后再把自己打包。
其实我们在maven build的命令下也填的是:clean install。
是不是也能理解为先maven clean清楚target目录文件,然后再重新打包?!有待后续研究。
3.【工程跑不起来】
将所有的更新工作做完以后,我们遇到的第一个问题就是工程跑不起来。
直接进入localhost:8080/ngtradebackend,马上就会报错。即,工程没有跑起来。
虽然Tomcat部署了,服务器也跑起来了。但是部署在服务器上的主工程却运行不起来。
【Tomcat上的工程运行起来的逻辑】
工程运行不起来,我们研究了工程正常运行起来的逻辑,工程能够正常运行起来,经历了一个什么过程。
1. 【工程没有问题】
当然,首要一步,工程要没有任何问题。这个可以保证,毕竟是线上的代码,有问题的可能性还是比较小的。
2. 【工程的正常运行逻辑】
工程,Java项目,为什么能够正常运行起来呢?一行一行可以在记事本打开看到的代码,为什么能够运行起来供我们使用呢?
这最基本的逻辑,因为长久以来,Eclipse自动帮我们做了很多,有些是通过不知道什么意思的指令或者菜单选项,有些是默认就帮我们做了。因为帮我们做了,所以连最基本的逻辑都忘了去研究。都忘了Eclipse只是一个编程的帮助工具而已。
【回顾HelloWorld】
我们可以去回顾一下,我们的Hello World!第一个Java项目运行的时候。
最原始的命令行运行的时候,执行了一些怎样的指令才成功运行的。
(想当初在学校的机房里只是照着PPT做,也没想是为什么就运行起来了,现在回过头去看最基础的东西。本来在HelloWorld的时候就应该明白的东西。)
JDK安装和环境变量的配置就略过了。我们只说代码诞生之后如何运行。这里假设,HelloWorld的Java代码在 D:\JAVA 下。
进入命令行窗口。
首先,切换到HelloWorld的代码目录下。
然后,输入javac HelloWorld.java,调用编译指令javac把HelloWorld.java转换为字节码文件HelloWorld.class。
最后,敲入命令java HelloWorld。就可以运行程序了,实际上是:代码转换为.class 文件后在JVM虚拟机下运行了。
回顾了如上过程我们就可以知道,java代码要运行,需要转为字节码文件.class,然后才能够放在JVM虚拟机下运行。
【反观Eclipse运行大型WEB项目的逻辑】
大型的WEB项目,当然不只是打印些什么东西出来。它需要调用数据库,需要引用别的工程,需要引用底层项目的jar包,还需要连接数据库,还需要能够接收数据并处理。要做的事情实在太多了。但其核心还是一个java项目,java web项目。最主要的也还是一堆.java的代码。这一堆.java 的代码也还是需要转为.class的字节码文件,才能够成功运行。
但现在的这种项目又不同于以前的纯java项目,只需要在Eclipse的工具栏中点Run就能运行的那种。
现在的web项目,需要部署在Tomcat服务器上,才能够成功运行。
Tomcat,也不是java web项目诞生的时候,它就诞生了。百科的解释是:Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。
所以,Tomcat也只不过是帮助web项目运行的一个工具罢了。
而Tomcat服务器做的事情又是什么呢?
查到的资料显示,Tomcat服务于B/S架构,即Browser/Server,浏览器/服务器模式。(与之对应的是C/S架构,即Client/Server,客户端/服务器模式。)
当然了,Tomcat是web服务器,肯定是B/S架构。废话,不然为什么叫web服务器!
我们以前运行普通的java项目的时候,不需要Tomcat服务器,为什么,因为不是web项目。只有是web项目才需要用到它。
为什么,web项目有什么特殊的地方?
web项目,所谓web项目,实际上运行起来是一个网站。这个网站为什么可以被访问,如何被访问?
通过链接进行访问的啊。为什么你可以通过链接进行访问呢?
那是因为这个web项目部署在了web服务器上。
我们需要什么才能够访问网站呢?网络,网络又是什么?万维网!
万维网的本质是什么?万维网的本质是"超文本文档"(HTML文档)组成的一个通过超级链接互相访问交互网络。
我们通过www.blabla.com去访问网站。却不知道只有将网站的web项目放到web服务器中才能够访问。
但是Tomcat作为一个web服务器,当然还有别的功能。
在论坛里看到这样的回答,TOMCAT,Apache 开发的一个 Servlet/JSP 容器,主要是解析和运行JSP。
对的,我们回想刚接触JSP的时候,如何才能看到效果?run on server对不?
这个server就是Tomcat服务器。
即,Tomcat服务器的作用是,包含了web项目,解析运行网站除了java代码的其他代码如JSP,这样别人才可以正常的访问网站。
但,web项目是由java代码和不是java的代码组成的。不是java的代码由Tomcat服务器解析和运行,是java的代码呢?
当然应该先转换成.class文件,然后才能够运行。所以Tomcat服务器上,肯定要有.class的字节码文件。
这些字节码文件来自于java代码的编译结果。
我们在Eclipse中运行web项目的时候,右键run on server就可以了。整个过程要等一段时间才能跑起来。
这个过程中,Eclipse在做什么?Tomcat在做什么呢?
细想就能知道一些了,Eclipse肯定会把web项目中的java代码转换成.class的字节码文件。也肯定会把这些字节码文件,还有不是java的代码如jsp等,放到Tomcat中去。
这样Tomcat运行的时候,才能把所有的代码跑起来。
再次回想一下最初的bbs项目,我们在提交代码的时候,为什么不需要提交build文件夹,因为build文件夹中是编译后的产物。
其中只有.class文件,这些文件于实际检查中是没有用的,只有在运行的时候才有用。所以可以随时删除,因为运行的时候,Eclipse会自动再帮我们生成一次。
因为要运行啊。
而maven项目的工程结构是什么呢?项目刚进去的根目录最主要的就是三个:src文件夹、target文件夹、pom文件。
pom文件抛开先不说。
src里是源代码,点进去发现只有一个main文件夹,再点进去就是三个文件夹:java、resources、webapp。
java里是java代码。当然也不只是有java代码,还会有SQL-MAP文件,说白了就是那一堆com.xxx.common之类的包下面的代码。
resources下面是一堆配置文件。比如sql-map-config.xml、module.properties等。
webapp里就是我们需要用到的一些资源文件了。资源文件不放在名为resources的文件夹下还真是奇怪呢!这个webapp中的资源文件就是jsp、js、css文件还有一堆图片什么的。比较重要的还有一个名为WEB-INF的文件夹,顾名思义,就是web信息的文件夹。其中有web.xml还有controller-action-config.xml。最原始的bbs项目中我们记得只有一个web.xml。其中的代码为了以示重视贴出来:
[html] view plain copy
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name>web_dj_ngtrade_backend</display-name>
- <servlet>
- <servlet-name>action</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:sql-map-config.xml,classpath:mission-sql-map-config.xml,classpath:point-sql-map-config.xml,classpath:query-sql-map-config.xml,classpath:data.xml,classpath:dao.xml,classpath:service.xml,/WEB-INF/controller-action-config.xml,/WEB-INF/rmi.xml,/WEB-INF/upload-servlet.xml,classpath:jms-beans.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>*.html</url-pattern>
- </servlet-mapping>
- <session-config>
- <session-timeout>180</session-timeout>
- </session-config>
- <listener>
- <listener-class>
- com.downjoy.app.ngtradebackend.common.web.SessionListener
- </listener-class>
- </listener>
- <filter>
- <filter-name>Filter1</filter-name>
- <filter-class>com.downjoy.app.ngtradebackend.common.web.MyFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Filter1</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>/jsp/login.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
其中最大的标签是web-app,定义web应用中的一些东西呗!
具体定义了四个东西。servlet、servlet mapping(怎么访问之类的,如.html)、listener监听器还有欢迎界面welcome-file-list。
源码中定义了这以上所有东西不可谓不完备。只是最后的web.xml文件,这么重要的文件却要放在不怎么会去关注的webapp放资源文件的文件夹里。而名为资源resources的文件夹里放的却是连接数据库之类的配置文件,太奇怪了!
最后就只剩target文件夹了。
只剩它了,想想就大约能感觉到。这个文件夹里放的是.class的字节码文件,还放了不是java代码的一堆东西,总之,把这个文件夹放到Tomcat服务器中,便能够将整个web工程跑起来了吧。
果然,点进去就有个class文件夹,还有另外一个文件夹,名字与项目名相同。另外还有一个本项目的war包。
原来源码中的java、resources、webapp三个核心文件夹变成了两个。一个class、一个项目名文件夹。
按理来说,比较正常的转换方式是----按原来的项目结构,只把java代码转为.class的字节码文件,其他的保持原来的结构就可以了。这里居然变了。
去看一下,发现class文件夹里除了java文件夹中的.java转过来的.class文件,还有原resources文件夹中为数不多的一些配置文件。也就是把java和resources文件夹合并为了
一个class文件夹。项目名文件夹中装着的,是原来webapp文件夹中的资源文件,即jsp、js、css文件还有一堆图片什么的。
这种建文件夹的方式也是奇怪,不过也许是为了往Tomcat上部署的时候,方便吧。。。。
既然知道了target中是什么东西。下一步,我们去看一下Eclipse中Tomcat的部署目录。看那里有些什么东西吧?
Tomcat的部署目录我们需要看的是这个文件夹-----E:\myworkspace\.metadata\.plugins\org.eclipse.wst.server.core
这个名为org.eclipse.wst.server.core。意思是:Eclipse下的服务器的核心文件夹。
这个文件夹的结构如下:
可以看到,建了几个服务器,就有几个tmp的文件夹。每个tmp就是一个服务器。除了这些文件夹,还有servers.xml文件。我们之前修改过服务器的启动时间,就是在这个名为server.xml的文件中修改的。它的代码如下:
[html] view plain copy
- <?xml version="1.0" encoding="UTF-8"?><servers>
- <server auto-publish-setting="2" auto-publish-time="1" configuration-id="/Servers/Tomcat v6.0 Server at localhost-config" deployDir="wtpwebapps" hostname="localhost" id="Tomcat v6.0 Server at localhost" name="alpha" runtime-id="Apache Tomcat v6.0" server-type="org.eclipse.jst.server.tomcat.60" server-type-id="org.eclipse.jst.server.tomcat.60" start-timeout="45" stop-timeout="15" testEnvironment="true" timestamp="14">
- <list key="modules" value0="9_16_1016_springmvcframeworkconstruct::org.eclipse.jst.jee.server:9_16_1016_springmvcframeworkconstruct::jst.web::2.5"/>
- </server>
- <server auto-publish-setting="2" auto-publish-time="1" configuration-id="/Servers/Tomcat v6.0 Server at localhost (2)-config" deployDir="wtpwebapps" hostname="localhost" id="Tomcat v6.0 Server at localhost (2)" name="data_backend" runtime-id="Apache Tomcat v6.0" server-type="org.eclipse.jst.server.tomcat.60" server-type-id="org.eclipse.jst.server.tomcat.60" start-timeout="45" stop-timeout="15" testEnvironment="true" timestamp="3">
- <list key="modules" value0="web_moyoyo_data_backend::org.eclipse.jst.jee.server:web_moyoyo_data_backend::jst.web::2.5"/>
- </server>
- <server auto-publish-setting="2" auto-publish-time="1" configuration-id="/Servers/Tomcat v6.0 Server at localhost (3)-config" deployDir="wtpwebapps" hostname="localhost" id="Tomcat v6.0 Server at localhost (3)" name="ngtrade_backend_8080" runtime-id="Apache Tomcat v6.0" server-type="org.eclipse.jst.server.tomcat.60" server-type-id="org.eclipse.jst.server.tomcat.60" start-timeout="45" stop-timeout="15" testEnvironment="true" timestamp="4">
- <list key="modules" value0="web_moyoyo_ngtrade_backend::org.eclipse.jst.jee.server:web_moyoyo_ngtrade_backend::jst.web::2.5"/>
- </server>
- <server auto-publish-setting="2" auto-publish-time="1" configuration-id="/Servers/Tomcat v6.0 Server at localhost (4)-config" deployDir="wtpwebapps" hostname="localhost" id="Tomcat v6.0 Server at localhost (4)" name="wap_trade2015_8080" runtime-id="Apache Tomcat v6.0" server-type="org.eclipse.jst.server.tomcat.60" server-type-id="org.eclipse.jst.server.tomcat.60" start-timeout="45" stop-timeout="15" testEnvironment="true" timestamp="4">
- <list key="modules" value0="wap_moyoyo_trade_2015::org.eclipse.jst.j2ee.server:wap_moyoyo_trade_2015::jst.web::2.4"/>
- </server>
- <server auto-publish-setting="2" auto-publish-time="1" configuration-id="/Servers/Tomcat v6.0 Server at localhost (5)-config" deployDir="wtpwebapps" hostname="localhost" id="Tomcat v6.0 Server at localhost (5)" name="wap_trade_8081" runtime-id="Apache Tomcat v6.0" server-type="org.eclipse.jst.server.tomcat.60" server-type-id="org.eclipse.jst.server.tomcat.60" start-timeout="45" stop-timeout="15" testEnvironment="true" timestamp="6">
- <list key="modules" value0="wap_moyoyo_trade::org.eclipse.jst.j2ee.server:wap_moyoyo_trade::jst.web::2.4"/>
- </server>
- <server auto-publish-setting="2" auto-publish-time="1" configuration-id="/Servers/web_trade-config" deployDir="wtpwebapps" hostname="localhost" id="web_trade" name="web_trade" runtime-id="Apache Tomcat v6.0" server-type="org.eclipse.jst.server.tomcat.60" server-type-id="org.eclipse.jst.server.tomcat.60" start-timeout="45" stop-timeout="15" testEnvironment="true" timestamp="4">
- <list key="modules" value0="web_moyoyo_trade::org.eclipse.jst.j2ee.server:web_moyoyo_trade::jst.web::2.4"/>
- </server>
- </servers>
其中有这么一行代码start-timeout="45" stop-timeout="15"。
即,不止定义了每个服务器的开始时间限制,还定义了每个服务器的停止时间限制。
这里,我们进入我们关注的第六个服务器tmp6。
进入tmp6文件夹,其中有个wtpwebapps文件夹。进入该文件夹可以发现有部署在该服务器下的项目的同名文件夹。
我们知道一个服务器上可以部署多个web项目。所以我们要找一个项目运行的所有文件,需要进入项目名文件夹中去找。
按常理来说,某个项目在Tomcat上部署运行所需要的所有东西,应当是全部在tmp文件夹中的-->wtpwebapps文件夹中的--->项目同名文件夹中才对。
那么关键的东西就都在项目名的同名文件夹下了。
这个项目文件夹里有什么东西呢?
为了防止遗忘,先回顾前面我们在Eclipse的项目名文件夹下的目录结构。
项目最原始的代码结构。java中
编译后产生的target文件夹中的代码结构
其中最核心的是classes文件夹和项目名同名文件夹。
而Tomcat部署目录下的项目同名文件夹的结构如下:
把资源文件下的文件夹放到根目录下,我们回过头去看Eclipse下的原始代码结构中src下的java、resources、webapp三个文件夹下的,webapp文件夹的结构。如下:
竟然是一模一样的。这就意味着有些东西,放到了这些文件夹中的某一个。应该。。。是WEB-INF文件夹吧。
进去之后果然,多了个classes的文件。
这里提一点。原本的Eclipse工作目录下的项目文件夹下。lib文件夹是在target文件夹下的,而src文件夹下并没有。src下的WEB-INF文件夹下只有那四个xml文件。
lib都放在target中。也就是,我们以后如果提交maven项目的核心原始代码。只需要提交src文件夹,其中就是不包含lib的。但包含了所有必要的其他东西。
而最原始的bbs项目,我们提交的时候都需要专门去删除lib文件夹。
这里可以看到一点点maven项目在项目结构上的优势了。虽然这些是题外话,也需格外注意一下。
说回来,上图中,这里的lib文件夹下是一堆jar包。
这里的classes文件夹下自然就是.class的字节码文件了。classes的文件夹结构如下:
其中,com下就是所有的java转过来的字节码文件了。其他的东西就是一些配置文件,我们可以看到其中有数据库的连接配置文件还有sql-map-config文件。
至此,所有预想过的运行需要的东西我们都在Tomcat的部署目录下找到了。
具备了java代码的字节码文件、包含了资源文件图片、js之类、还有jsp文件,具备解析jsp的能力。还有能够提供别人访问该项目的接口的能力,Tomcat的确可以保证这个网站可以运行起来,并被访问到。
至此,我们就理清了一个大型web项目从代码到可运行的过程,是怎么样的。
【如何实现从诞生到运行】
接下来,我们来探究这个过程的实现需要如何,需要如何,才能保证源码可以编译,编译后可以成功部署到服务器上。
这个过程,是src到target,是target到tomcat。
src到target,肯定是Eclipse帮我们做的。target到tomcat呢?应该是Eclipse和tomcat一起帮我们做的吧。
对,但Eclipse和tomcat是怎么联系到一起的呢?
就是如何在Eclipse配置tomcat的问题咯!回顾这个过程,
Eclipse下window下的preferences选项,其中有个server选项,顾名思义就是服务器的相关配置。就是在这里配置tomcat服务器的。
选择runtime environment,add新的服务器,选择好版本Apache Tomcat v6.0,然后next,需要在Tomcat installation directory,即tomcat服务器的安装目录中配置我们最初安装tomcat时候的安装目录位置。
这样,tomcat安装的位置,就被配置到了Eclipse中去了,Eclipse以后跑web项目的时候就可以使用tomcat服务器了。
我们正常跑一个web工程是怎么个过程呢?直接右击项目,run on server。就会直接跑起来。这个过程中做了什么事情,我们也分析过了。
项目本身的代码是没有问题的,跑不起来,就是这个默认的过程出了一些问题。把这个过程手动进行一遍。
接下来说,这个工程跑不起来 的问题,是如何解决的!
【解决】
解决过程中遇到了两个clean操作!
这里涉及到了一个单词build,build在程序员的词典里,应当不是建造的意思,应当是编译的意思,build project的意思就是编译工程。
第一个clean。
Eclipse的project菜单栏下的clean选项。这个clean的作用,Eclipse也告诉我们了:Clean will discard all build problems and built states.The projects will rebuilt from scratch.即,重新编译的意思。
我们在project下除了clean选项还能看到别的选项。open project、close project、build all、build project、build working set(这个是什么意思,建立文件夹?对,是将工程按类放起来的选项)、(这里插个刚刚发现的小功能,把Eclipse下package explorer下的工程分类展示,右上角有个下拉三角,其中有个Top Level Elements,选择projects就是工程一个个展示,选择working sets就是分类展示)、build automaticlly即自动编译、还有generate javadoc、还有Properties。
其中的自动编译选项我们是打了勾的,即,Eclipse会帮我们自动编译。
如果我们选择clean,执行clean操作,就会先删除原有的.class字节码文件,然后同时重新编译一遍。
即,删除字节码文件后,重新生成一遍字节码文件。但是maven clean又是在做什么?
查到的资料显示,是清除maven工程的target目录下的文件。
我们测试了一下,的确是清除了文件,但不是全部清除,包含了.class文件的class文件夹就没有变化。也就是说,.class的字节码文件的编译还是Eclipse来做的。
而其它文件的生成却是maven本身的一些操作。因为target目录下的项目同名文件夹,里面可是各种资源文件呢。
而target下的这些jsp等资源文件和src下的webapp资源文件,结构和内容,除了lib,是一模一样的。
那最终部署到tomcat服务器上的时候,资源文件是来自于src下的webapp呢?还是来自于target下maven生成的那些资源文件呢?不知道!
第二个clean。
是tomcat服务器右击选择的clean。这个clean操作做的又是什么事情呢?
除了clean选项的另一个publish选项做的又是什么事情呢?查到的解释如下:
publish:是将你的web程序发布到tomcat服务器上,这样通过浏览器就可以访问你的程序。
clean:是指原先编译到tomcat服务器上的程序,先清除掉,然后再重新编译。
我们之前直接运行tomcat,看来是默认帮我们发布了。。。很多都不需要管。
但是出错了,就需要clean了,重新编译。然后运行tomcat服务器就可以了。
4.【Server returned HTTP response code:504 for URL】
这是我们在工程跑起来以后,又遇到的一个bug问题。504错误表示未找到,猜测是由于网络问题,导致应该访问的东西访问不到而报错。
后来也没有解决,只是无视掉了。工程可以正常运行,就无所谓了。
到这里记录过程就告一段落了。花了近5个小时的时间写了这篇博客。
追溯了Java工程在Eclipse中运行的逻辑,了解了项目结构等等。是为了以后不再因为一些模糊不清的东西,原地转圈。
OVER!
【12.24日更新】
搞清楚了maven clean真正做了什么操作。的确是清除了target目录下所有有价值的文件。包括.class文件还有jsp、js、css和图片等等。
但最核心的还是清除了.class文件,虽然classes的文件夹还在,其中的内容已经没有了。
我们不需要执行maven install或者maven build等给maven工程打包的相关操作。
只需要重新project clean就可以了。因为这个操作才是真正重新编译生成字节码文件的操作。
生成的字节码文件默认会放到target文件夹中的classes文件夹中去。
经检验,这个target文件夹中的class字节码文件与tomcat的部署目录中的字节码文件是同步的。
清了target文件夹,部署目录中的字节码文件也就没有了,所以跑不起来。
同样,如果我们执行一次project clean,字节码文件重新生成,部署目录中的class文件也会回来,工程就可以跑起来了。
而部署目录中的非java代码和资源文件。。。放进去了就没事了。可以猜想,这里的这些文件不和target文件夹同步,而是来自于src文件夹
中的webapp文件夹。只要源码不动,这里也就没事。
不过。。。这个猜想也有可能是错误的。因为有可能是target文件夹中之前执行过maven install和maven build操作,使得target中有了资源文件和jsp等等。
才能够成功放到部署目录中也说不定。
但是最起码,我们知道了如何看tomcat部署目录。部署目录中需要具备什么东西才能够成功运行。
也知道了工程跑不起来的真正原因了!
【12.24 日补充】
【deployment assembly】
在项目的属性中有这么一项,deployment assembly
我们可以看到这个选项中定义了什么内容。
这个选项就是定义了一些路径,即,路径与路径的对应关系。
路径的内容,我们发现是项目运行所需要的所有东西。而且是需要的全部东西,包括了源码的所有class文件和资源文件还有项目运行需要依赖的所有包。
我们看到class文件被定义的路径去向是:WEB-INF/classes,这是tomcat部署目录的路径啊。
即,这个菜单定义的是,项目运行所需要的东西,从项目文件夹到tomcat部署目录放的时候的路径!!
即,项目运行时为什么可以把这些东西准确的放过去,是因为定义了路径。
【maven --update project】
我们之前也遇到过maven---update project的操作。这个选项又是在做什么呢?
其实选项中早就告诉我们了,所以!使用一个选项的时候,一定要知道是在干什么!
去读一下!看到英文去读一下!Eclipse都告诉我们了。
这个更新工程的操作做的事情是:
更新根据pom文件对工程进行的配置,也就是jar包呗。也就是pom文件改了以后需要改这儿呗!
更新工作空间的资源,资源来源于本地文件系统,也就是源码呗。
clean 工程。这个不知道什么意思。
【pom文件】
pom文件定义了项目运行所依赖的很多包。运行项目的时候,通过这个链接到那些包。
我们在再次阅读这个文件的时候,发现不仅仅有基本依赖的包。
需要依赖的项目包的位置也早就已经写进去了!
在deployment assembly选项中,maven仓库中的包属于maven dependencies。
而项目依赖包也出现了。这些都是pom文件帮我们做的。
- 【转载备】更新整个maven工程及相关底层并再运行的记录
- 【详解】更新整个maven工程及相关底层并再运行的记录
- maven工程的运行
- 中华淘书网-Maven聚合工程的创建及运行
- iOS运行时runtime及相关Objective-C底层讲解
- JPress开源框架的安装过程 Maven工程导入MyEclipse并运行
- WEBX3学习-eclipse下导入并运行webx(maven)工程
- 基于maven创建spark工程、调试并运行
- Jenkins 构建maven工程打成jar包并运行
- Maven工程的一个更新问题
- maven工程开发部署的相关操作
- Maven tomcat运行项目的参数记录
- 底层的感悟。转载
- android 6.0以后的运行时权限申请及封装 相关记录
- <整理>将项目打包成runable jar包并运行遇到的问题及解决办法记录。
- maven 相关命令记录
- nrf51822学习之样例从广播机制窥探整个工程的运行
- 如何创建maven工程及有子父关系的工程
- 程序员不愿意加班的真相
- Twincat3.1 configure
- ffmpeg 推送、保存rtmp 流命令
- 设置Linux内核参数
- centos6 安装配置zookeeper
- 【转载备】更新整个maven工程及相关底层并再运行的记录
- Android设备在切换网络时,屏幕突然白屏
- 关于android Could not lock surface问题
- (学习)SQL注入--宽字节注入
- 二分查找法
- 【Scikit-Learn 中文文档】随机梯度下降
- VMware 虚拟机开机黑屏解决方案
- Visio 组件Aspose.Diagram 11月新版17.11发布 | 附下载
- Word2003入门动画教程73:让Word中的图片精确定位