问题描述
想把本地某个Java Web 工程使用Git进行版本管理,上传到GitLab进行共享。遇到一些问题,其记录如下发现。
过程
首先我本地有一个Java Web工程,其文件目录如下,使用的IDE是MyEclipse:
然后使用Git对它进行版本管理,其实很简单,就是在这个文件夹下初始化一个Git仓库,然后把需要进行版本管理的文件纳入其中,不需要进行版本管理的文件在".gitignore"进行声明即可。
第一个问题就是什么文件需要进行管理,什么文件不需要进行管理
为了解决这个问题,要清楚每一个文件/文件夹的作用:
.settings:里面是包含一些设置,主要是该工程专有设置,比如该工程是什么类型(是web还是普通Java),这个最好加入管理;
src:不要多说,就是放代码的,肯定要加入管理;
target:放编译好的class文件,这个一般不加入管理;
WebRoot:放web.xml等跟web相关的配置文件,这个要加入管理;
.classpath:不清楚,大概是类加载路径之类的信息,这个最好加入管理;
.project:也不清楚,这个最好加入管理;
pom.xml:放maven依赖信息,这个必须加入管理;
我试过如果不把.settings纳入管理,则克隆下来的工程不能被MyEclipse识别为web工程,只识别为普通java项目,不能添加部署到tomcat。
因此,我采取的方法就是除了target文件夹,其它所有的东西都纳入版本管理,那么别人一克隆就能愉快地运行。
把target文件夹排除出版本管理,就要在.gitignore文件里面声明,这里顺带提一下一些相关知识:
abc #代表把所有名叫abc的文件与文件夹都排除管理,不仅仅是当前这一级目录的,还包括子文件夹里面的都统统排除
abc/ #代表把所有名叫abc的文件夹都排除管理,包括子目录下的也统统进行排除
/abc #代表排除当前这一级目录下的名叫abc的文件与文件夹
创建Git仓库,然后把需要的文件加入管理之后,push到GitLab,再从GItLab克隆下来import到MyEclipse进行验证,看能不能够顺利运行。
在运行的时候,出现第二个问题,clean后target/classes/下没有.class编译文件
我通过查看problems发现,提示有一个错误,说缺少src\test\resources目录。我看了提示之后,来到克隆下来的工程目录,果然没有这么一个文件夹。这是怎么回事呢,明明我把src文件夹已经纳入管理并push上去了,为什么克隆下来的时候没有这个src\test\resources目录呢?
这时候,就要提一下Git的一个隐秘规则,这就是:
Git不会把空文件夹纳入管理!!!
没错,我是把src文件夹纳入管理了,没想到其下有test文件夹,test是用来存放测试资源和代码的,资源存到src\test\resources,测试代码存到src\test\java,因为项目没有进行过测试,所以test下除了空文件夹什么都没有。也就是说src包含了一个test空文件夹,即使test里面也有文件夹,但是无奈也是空的,因此Git并没有把test及其子文件夹纳入管理,因此克隆下来的时候并没有src\test这个文件夹。
那么解决办法就是,在所有想要纳入管理的空文件夹里面随便创建个文件,然后commit即可。按照惯例,创建名为.gitkeep文件。
在win7下创建这种命名方式的文件需要用命令行,在想要创建文件的目录里按shift+鼠标右键,选择打开命令行,然后输入如下命令即可:
type NUL > .gitkeep
好了,把更改提交,并push到GitLab后,在从GitLab重新克隆下来,import进MyEclipse运行,终于有了编译好的.class文件了,部署到tomcat,一切正常。
至此,把Java Web项目纳入版本管理,并克隆下来编译运行成功!