每新开一个Java项目,
第一步无一例外都是先打一个框架出来,通常我们是在过去用的比较成熟的框架上删删改改直接用。比如改出来下面这样结构的一个简单框架。
通常每次操作都是类似的,删除无用代码,改项目名包名,一个一个改相关特定配置等等。
其实这些操作都可以用程序来完成。
用程序处理既省事,又可靠,也不用担心漏改。
所以,我们可以维护一个项目基础框架,这个框架项目就叫
projectframe
。然后写一个脚本
generate-new-project-based-on-this.sh,根据这个基础框架项目克隆出一个新项目来,比如叫
butterfly,然后重命名
projectframe为
butterfly,再逐步重命名包名、Java文件中的包路径、pom中的module名等。最后还可以做一些初始化,比如初始化git,为当前项目指定git用户,初次提交等等。
如下。
projectframe demo
其中的class
配置文件
mybatis-generator 配置文件
pom文件
红框标注的地方以及一些含有
projectframe
的文件夹都要重命名为新项目名
butterfly。
如果手动改或使用全局替换就比较麻烦。
shell 脚本
60多行代码,很简单,基本看注释就能看懂。其中主要用了
tree命令来列出文件和文件夹,借助
mv、
rm、
sed等命令来
重命名、清理和查找替换关键字(
projectframe → 新项目名)。不再赘述,大家可以拿来改改自己玩。需要注意的是脚本中用了
rm -rf 命令,并且在
rm前没有做check,可能存在一定风险,慎用!(可换成mv)。不过,我这个项目中已经cd到新项目目录,删除时用的相对路径。
使用
命令行执行
sh generate-new-project-based-on-this.sh butterfly
其中 butterfly即为新项目名称。 最终效果 脚本执行完后即可在frame框架项目的同级目录看到新项目,如图 最后用idea打开,编译。 完美完整shell代码
alias 'log=echo `date +"%Y-%m-%d %H:%M:%S"`'new_project=$1#new_project='buterfly'if [ "$new_project"x = "x" ]; then log "################# arg new_project is blank, exit #################" exit 8filog "################# clone one #################"log "new project: $new_project"new_project_name=thinkey-$new_projectlog "new project name: $new_project_name"cp -r . ../"$new_project_name"/log "################# cd ../$new_project_name #################"cd ../"$new_project_name" || exitlog "$(pwd)"log "################# clear #################"for to_delete in $(tree -aif | grep -E ".iml|.idea|target"); do log "rm -rf $to_delete" rm -rf "$to_delete" # rm "$to_delete"donelog "rm -rf .git"rm -rf .gitlog "################# refactor #################"log "################# rename directory #################"for old_dir in $(tree -dif -L 1 | grep projectframe); do log "$old_dir" new_dir_name=${old_dir/projectframe/$new_project} log "$new_dir_name" mv "$old_dir" "$new_dir_name"done# rename packagefor old_dir in $(tree -dif -L 7 | grep projectframe); do log "$old_dir" new_dir_name=${old_dir/projectframe/$new_project} log "$new_dir_name" mv "$old_dir" "$new_dir_name"donelog "################# search and replace #################"for file in $(tree -if -I '*.jar|generate-new-project-based-on-this.sh'); do if [ -f "$file" ]; then log "replace in $file" sed -i "" "s/projectframe/$new_project/g" "$file" fidonerm -f generate-new-project-based-on-this.shlog "################# git init and commit #################"git init# specify user for current repositorygit config user.name "qiaojianyong"git config user.email "qjyoung@163.com"git add .git commit -m "go!"log "################# finish #################"