用shell脚本怎样编译java工程
编译java工程一般直接用IDE或者用Ant、Maven之类的工具,很少有人用纯shell来编译java工程。正好遇到这样一个应该,用这篇博文做一下记录。
案例:用eclipse写了一个java project,然后编译打成jar包。
这个可以采用eclipse自带的Export就可以导出jar了。但是为了软件自动化等巴拉巴拉的原因,采用存shell脚本编译。
就是制定了运行的main-class(有public static void main(String args[])的类)。
将这个文件拷贝到iec104的根目录下,然后执行脚本compile.sh,内容如下:
#!/bin/bash
cur_dir=$(pwd)
echo $cur_dir
function do_compile_iec104(){
# echo $cur_dir
iec104=$cur_dir/iec104
iec104_src=$cur_dir/iec104/src
iec104_bin=$cur_dir/iec104/bin
# echo $iec104_src
# echo $iec104_bin
iec104_class=$cur_dir/iec104/class
# 将iec104的src目录下的所有java文件的名称存入到iec104/src/sources.list文件中
rm -rf $iec104_src/sources.list
find $iec104_src -name "*.java" > $iec104_src/sources.list
cat $iec104_src/sources.list
# $iec104_class是存放编译的class文件的目录
rm -rf $iec104_class
mkdir $iec104_class
# 这里开始编译java文件,注意这里的-encoding utf-8,刚开始并没有加入这个,然后就报了一堆错误,纠结了很久才发现,这里给各位提个醒了。
javac -d $iec104_class -encoding utf-8 -classpath $iec104_bin/classes12.jar:$iec104_bin/junit-4.10.jar:$iec104_bin/log4j-1.2.17.jar:$iec104_bin/mysql-connector-java-5.0.5-bin.jar:$iec104_bin/RXTXcomm.jar -g -sourcepath $iec104_src @$iec104_src/sources.list
# 由于用到了log4j,所以要将log4j的配置文件一并放入,如果没有用到,可以忽略这句
cp $iec104_src/log4j.properties $iec104_class
# 如果原来在iec104目录下有jar报就删除掉,因为要生成新的
rm $iec104/iec104.jar
# 这里要cd到存放class的目录,否则如果采用绝对路径编译,编译出来的jar包里面就是绝对路径了,这样就会有问题
# jar -cvfm $iec104/iec104.jar $iec104/MANIFEST.MF $iec104_class/*这样是错误的
cd $iec104_class
jar -cvfm $iec104/iec104.jar $iec104/MANIFEST.MF *
# 赋予可执行权限
sudo chmod a+x $iec104/iec104.jar
}
do_compile_iec104
exit 0
运行这个脚本(linux下)就可以编译并且在iec104的目录下就可以看到iec104.jar文件了。
这里补充下java命令的基本知识:
javac 用于编译Java文件,格式为:
java [options] [sourcefiles] [@files]
其中:
options:命令行选项;
sourcefiles:一个或多个要编译的源文件;
@files:一个或多个对源文件进行列表的文件,有时候要编译的文件很多,一个个敲命令会显得很长,也不方便修改,可以把要编译的源文件列在文件中,在文件名前加@,这样就可以对多个文件进行编译,对编译一个工程很有用,方便,省事。
有几个比较重要的选项:
-d 用于指定编译成的class文件的存放位置,缺省情况下不指定class文件的存放目录,编译的class文件将和源文件在同一目录下;
-classpath 可以简写成-cp,用于搜索编译所需的class文件,指出编译所用到的class文件的位置,如jar、zip或者其他包含class文件的目录,指定该选项会覆盖CLASSPATH的设定;
-sourcepath用于搜索编译所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目录;
需要注意windows下和linux下文件路径分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的区别:
windows下文件路径分隔符用 ,文件列表分隔符用分号 ;
linux下文件路径分隔符用 / ,文件列表分隔符用冒号 :
B. 如何使用shell脚本一键编译
/可执行程序名
由于安全原因,PATH环境变量不包括当前目录,因此要执行在当前目录下的程
C. 自动编译脚本怎么写
MOV DX, OFFSET MSG1
MOV AH, 9 ;9号功能调用,显示提示.
INT 21H ;显示.
MOV AH, 1 ;1号功能调用,键入、显示.
INT 21H ;
CMP AL, '0'
JB ERR
CMP AL, '9'
JBE L1 ;小于等于9转移.
ERR:
MOV DX, OFFSET MSG3
MOV AH, 9 ;9号功能调用,显示提示.
INT 21H ;显示.
JMP EXIT
;------------------------------
L1:
D. 如何把shell脚本编译成二进制可执行脚本
你可以试试下面两种方法
a. easy way: gzexe shell-name
b. gcc compile file
E. 如何编写一个编译程序的脚本
Linux中我们安装软件或者一些常用操作,都会接触很多命令,有时在关键时刻往往因为忘了一些简单的命令而苦恼,这时,我们不妨把命令写成可执行的批量脚本,可以减少很多重复而又容易忘记的代码,写成一键脚本还有一个好处就是方便迁移,可以直接将写好的sh文件在其他Linux平台运行。
格式:
文件后缀.sh
第一行代码需要指定路径来执行程序
#!/bin/sh
#!/bin/bash
一般一键脚本会要求用户输入各种选项:
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
read -t 30 -p "请输入用户名称:" name
echo -e "\n"
echo "用户名为:$name"
#提示“请输入密码”并等待30秒,把用户的输入保存入变量age中,输入内容隐藏
read -t 30 -s -p "请输入用户密码:" age
echo -e "\n"
echo "用户密码为:$age"
#提示“请输入性别”并等待30秒,把用户的输入保存入变量sex中,只接受一个字符输入
read -t 30 -n 1 -p "请输入用户性别:" sex
echo -e "\n"
echo "性别为$sex"
F. 如何编译脚本
首先要了解什么是脚本? 脚本(Script),就是含有bind和alias等命令的集合,你可以把这个集合存为一个独立的文件然后在需要的时候执行,这样就可以方便你在CS中的使用。 脚本可以存为后缀名为.cfg的文件放在cstrike文件夹下,执行时在控制台输入:exec (脚本文件名).cfg 即可。比如将一个脚本存为buys.cfg文件,则在控制台中输入:exec buys.cfg则可以实现我们所需要的功能。要实现一个命令只要把这一过程定义(alias)好,并且分配一个键位给这个命令,以后只要按分配好的键位,就可以实现这一过程。所有的脚本都是通过这一方法实现的。 语句简介: 1. alias语句是参数赋值用,语法为alias 参数名 "数值" 2. bind语句为绑定命令,就是把某个alias赋值的参数绑到某个键。具体的语法为bind "键名" "参数名" 3. "buy"相当于按下"b"键; "buyequip"相当于按下"o"键; "menuselect x"就是对应购买菜单的号码。 举两个例子: * 你要买ak47,那你在开局时会按b-->4-->1, 对应的脚本就是buy; menuselect 4; menuselect 1;(中间用分号隔开) * 你要买手雷和1个闪光弹的话,那你在开局时会按o-->4,o-->3, 对应的脚本就是buyequip; menuselect 4; buyequip; menuselect 3; 注意bind键不能冲突,否则先bind的无效 什么是bind? Bind就是分配一个命令到指定的键,它同样能够分配一个alias到指定的键。 比如:bind "mouse1" " attack" 表示分配 attack(攻击)这个命令到指定的键mouse1(鼠标左键) 什么是alias? Alias就是给一组命令定义一个名称,当你定义过后,CS就认为此alias为一个普通的命令,你可以用bind命令分配一个键给这个alias,也可以在其他的alias中使用它。 比如:alias hw "say Hello World!" 则当你在控制台(console)中输入hw这条命令回车执行后,你就对服务器里所有的玩家说了"Hello World!"这句话。 你还可以用bind命令:bind "v" "hw" 当你按过v键后,你同样对服务器里所有的玩家说了Hello World!这句话。 又比如: alias buym "buy;menuselect 3;menuselect 1" //(注:相当于b-3-1) alias buyv "buy;menuselect 8;menuselect 1" //(注:相当于b-8-1) alias buysay "buym;buyv;hw" //(注:组合定义到一起) bind j "buysay" //(注:组合再定义到J键) 则表示当你执行buysay命令(注:按J键即可)后,购买MP5和普通防弹衣,然后对服务器里所有的玩家说Hello World!这句话。 此alias实现的方法为: 第一步执行buym命令,buym命令已经定义好为"打开购买菜单;选择菜单第3项;再选择菜单第1项",即实现了购买MP5的功能; 第二步执行buyv命令,buyv命令已经定义好为"打开购买菜单;选择菜单第8项;再选择菜单第1项",即实现了购买普通防弹衣的功能; 第三步执行之前已经定义好的hw命令:对服务器里所有的玩家说Hello World!这句话。 把这三步命令定义为一个新的命令buysay,然后用bind命令分配一个键给这个新的命令,则当你按下j键后就实现了这三步命令的功能。 注意: alias语句在Half-Life Counter-Strike里不能超过259个字符即下面这行字符的长度(一般也超不到这里来的)
G. 脚本语言不需要编译怎么执行呀
因为大多数脚本都是解释型语言。
解释型语言是相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。 解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执 行一次都要翻译一次。因此效率比较低。比如Basic语言,专门有一个解释器能够直接执行Basic程 序,每个语句都是执行的时候才翻译。(在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨平台性好.)
一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。
H. 如何把VBS脚本编译成可执行的EXE文件
如果你希望编译后的EXE在不支持VBS的机器上执行,那可能非常麻烦,甚至一定时期内无法实现。
如果编译的EXE还是在支持VBS的系统上执行,那就简单了,你可以随便选择一个语言,比如DELPHI、C++、VB都可以,把VBS脚本内容写在高级语言的源程序里面,程序运行时在临时文件夹建立一个VBS文件,然后调用它,运行完毕以后删除脚本。
I. 脚本是用什么语言编译
编译性语言:
在运行前需要将源代码转换为可执行代码的语言。
例如:C, C++, Java, C#。
解释性语言:
运行前不需要编译,可直接由运行器程序直接执行的编程语言。
例如:PHP, Bash。
脚本语言:
解释性语言中,用于执行简单任务的语言。一般没有 类 或者此类高级功能。
例如:Bash, Batch。
J. 脚本和编程代码有什么区别
区别如下:
1.性质不同
脚本指表演戏剧、拍摄电影等所依据的底本或书稿的底本。编程代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。
2.外文名不同
脚本外文名是script,编程代码外文名是code。
3.范围不同
脚本范围指表演戏剧、曲艺,摄制电影等所依据的本子,编程代码(也称源程序)范围是指一系列人类可读的计算机语言指令。