shell在windows下自动把你修改过的文件塞到指定的jar文件中

2014-11-24 01:00:57 · 作者: · 浏览: 0

功能简介:

aj.sh 自动把你版本库下处于checkOut状态的非java文件、java源码编译后的class文件,塞到指定的jar文件中。

aj24.sh 自动把你最近24小时内修改过的的非java文件、java源码编译后的class文件,塞到指定的jar文件中。


运行方式:

1、用文本编辑器打开aj.sh、aj24.sh,更改以下几个变量:

jar_file 指定jar文件的完整路径(注意路径分隔符一律用’/’)

bin_dir 指定class所在的bin完整路径

src_dir 指定源码所在的src完整路径

2、打开cygwin,进入脚本文件所在的目录,运行如下命令:

sh aj.sh

sh aj24.sh

ps:

指定cygwin打开时的默认路径:

新建一个环境变量HOME,设置为脚本文件所在的目录。

这样可以更加方便、快速地运行脚本。

路径分割符用‘/’,磁盘符用cygdrive表示。eg: d:shell ――》 /cygdrive/d/shell


环境依赖:

JDK/JRE

Cygwin

cywin安装:进入下载http://cygwin.com/install.html,将“setup.exe”下载到本地运行,一路默认即可。

安装参考文档:http://goo.gl/eXfzx

cygwin常用命令及find命令说明


缺陷:

1、 如果你修改的是需要转义的中文资源文件,需要自己去转义后再覆盖过去。

2、 如果你修改的是java文件中的非内部类,也需要手动去找到该class类,再塞到jar文件去。

脚本文件:

aj.sh (将第16行注释掉,第17行去掉注释,即为“aj24.sh”)


1 #!/bin/sh
2 # Auto zip the files which are checked out or modified to the target jar file.
3
4 # Note: use / as separator in directory
5 # target jar file
6 jar_file=G:/demo.jar
7
8
9 # bin directory of compiled class files
10 bin_dir=D:/workspace/demo/bin
11
12 # src directory of source files
13 src_dir=D:/workspace/demo/src
14
15
16 condition=-perm 644
17 #condition= -mtime 0
18 c_j=0
19 c_nj=0
20 c_c=0
21 function count_javaFiles
22 {
23 let "c_j=$c_j + 1"
24 }
25 function count_nonJavaFiles
26 {
27 let "c_nj=$c_nj + 1"
28 }
29 function count_classFiles
30 {
31 let "c_c=$c_c + 1"
32 }
33
34 function inspectZip
35 {
36 local fileName=$1
37 local dir_pre=$2
38 local line
39 local list
40 local myDir_pre
41 cd $bin_dir
42 list=` find . -name "${fileName}[$.]*class" `
43
44 for line in $list
45 do
46 myDir_pre=${line%/*}
47 if [ $myDir_pre = $dir_pre ]
48 then
49 jar -uvf $jar_file $line
50 count_classFiles
51 fi
52 done
53 }
54
55 function easyZip
56 {
57 local file=$1
58 jar -uvf $jar_file $file
59 count_nonJavaFiles
60 }
61
62 cd $src_dir
63 list=`find . -type f $condition ! ( -name *.java -o -name *.keep -o -name *.keep.[0-9]* -o -name *.contrib -o -name *.contrib.[0-9]* )`
64 for line in $list
65 do
66 easyZip $line
67 done
68
69 list=`find . -type f $condition -name *.java `
70 for line in $list
71 do
72 dir_pre=${line%/*}
73 fileName=`echo ${line##*/} | cut -d . -f1`
74
75 inspectZip $fileName $dir_pre
76 count_javaFiles
77 done
78
79
80 echo "non-java files: $c_nj"
81 echo "java files: $c_j"
82 echo "class files: $c_c"
83 echo "total files: $[$c_nj + $c_c]"
84