爬坑心得(一)

再将gradle由单一工程转化为父子工程的过程中,遇到了很多问题,一度陷入绝望之中,不过很多时候就是这样,在绝望中寻找希望,人生终将辉煌。

一、将gradle工程导入到IDEA时,选中build.gradle进入到下一步之后,不要勾选“Create separate module source set”,否则就会根据gradle配置自动创建子工程。

爬坑心得(一)

二、在IDEA中提交Git时,提交前右边栏的“Before Commit”要有意识的选择,勾选了就要知道会增加哪些操作,否则可能会引起很多诡异的问题,这里我一般是默认都不勾选。

爬坑心得(一)

三、用IDEA中的Git管理代码,有时会遇到“Add Unversioned files”的问题,这是因为不会使用IDEA,这时我们可以安装IDEA的“idea-gitignore”插件,有两种方式生成完善的.gitignore文件。

1、若没生成.gitignore文件,那么就选中工程右键,New -> .ignore file -> .gitignore file (Git),在弹出窗中依次搜索IDEA、Eclipse等,把工程相关的模块自动加入.gitignore文件中。

爬坑心得(一)

爬坑心得(一)

2、若已存在.gitignore文件,那么就选中.gitignore文件右键,选择“Add template”,在弹出窗中依次搜索IDEA、Eclipse等,把工程相关的模块自动加入.gitignore文件中。

爬坑心得(一)

爬坑心得(一)

四、因为是基于JSP视图的系统,所以保留了“src/main/webapp/WEB-INF/jsps/”这样的目录结构,但是一度用Spring Boot的启动类启动后找不到JSP视图,之后尝试用死办法把“WEB-INF/jsps/”目录放到“src/main/resources”的目录下,因为resources是默认的classpath,这样虽然能够找到JSP资源,但是并没有用JSP的视图解析器去解析,最后发现只要用gradle自带的bootRun启动就可以了,可能只有这样spring才会把webapp当成是默认的classpath,于是可以自动找到JSP资源后用JSP的视图解析器去解析。

爬坑心得(一)

五、在java程序启动时,classpath非常重要,它能决定是否可以找到资源,譬如以下三类classpath,你是否都注意到了。

1、直接右键“Run Application.mian()”启动;

2、用gradle bootRun启动;

3、用java.exe启动

六、在Windows系统中构建时,用如下指令会把webapp目录拷贝到目标目录下,但在Linux系统中进行构建时却不会拷贝。

 applicationDistribution.from('/src/main/webapp') {
into 'webapp'
}
后来发现将“/src/main/webapp”前面的斜线去掉就可以了,即改成“src/main/webapp”,说明gradle对不同系统的路径识别方式是有差异的。在Windows下,加上“/”和不加“/”都能识别为各子工程的相对路径;但在Linux下,不加“/”也是识别为各子工程的相对路径,加上“/”却是识别为root工程下gradle.build同级的绝对路径。
为了及时发现这个问题,可以从以下两个方面进行改进。
1、每当从子工程拷贝出一个文件,就要在此工程打包出的jar包中exclude掉这个问题。
  jar {
exclude('**/*.webapp')
}

2、在installDist中加上绝对路径的打印。
 installDist {
into "${rootProject.projectDir}/dist/${project.name}"
// 输出编译子工程时的绝对路径
println file('/testPath/').absolutePath
}