请教大神Linux下编写shell脚本,利用javac如何编译完整的java工程?

同一派 发布于 2015/06/18 17:54
阅读 3K+
收藏 0

想请教大神,我在shell脚本中需要利用javac编译从svn上拉取下来的java工程,不使用maven或者其他的项目管理工具,就是用原生的javac进行编译,请教大神,其中的shell脚本命令该如何写?

我在网上找了相关的文章http://blog.csdn.net/huagong_adu/article/details/6929817,但是看不懂里面的思路和命令,希望大神能详细讲解讲解,刚开始学习shell脚本,又是项目任务,着实不知该如何下手,希望大神能不吝赐教,万分感激!!!!!!!!!!!!!!!!!!!!!!!!!!!!

加载中
0
cyper
cyper
那篇博客不错。mark先
0
Force武装卫队
Force武装卫队

shell 脚本就是将 各种命令通过一定的逻辑语句组合起来,最简单的有

#!/bin/bash

echo "Helloworld"



复杂的有

#!/bin/bash

javabin=$(which java)

if test -e $javabin
echo "Found java bin in your path."
java -version
then

当然有更加复杂的,看看别人脚本怎么写的,你也行, https://git.oschina.net/ipvb/ServiceLauncher/blob/master/launcher 这里有个比较复杂的脚本,可以看看。

0
同一派

引用来自“cyper”的评论

那篇博客不错。mark先
...额,大神能不能教教我如何用javac编译整个java工程
0
同一派

引用来自“Force武装卫队”的评论

shell 脚本就是将 各种命令通过一定的逻辑语句组合起来,最简单的有

#!/bin/bash

echo "Helloworld"



复杂的有

#!/bin/bash

javabin=$(which java)

if test -e $javabin
echo "Found java bin in your path."
java -version
then

当然有更加复杂的,看看别人脚本怎么写的,你也行, https://git.oschina.net/ipvb/ServiceLauncher/blob/master/launcher 这里有个比较复杂的脚本,可以看看。

谢谢您!我看了您推荐的文章,真看不懂啊!

能不能请您先教教我如何用javac编译整个java工程,我现在急于想解决这个问题,谢谢啦!!!

0
Force武装卫队
Force武装卫队

引用来自“Force武装卫队”的评论

shell 脚本就是将 各种命令通过一定的逻辑语句组合起来,最简单的有

#!/bin/bash

echo "Helloworld"



复杂的有

#!/bin/bash

javabin=$(which java)

if test -e $javabin
echo "Found java bin in your path."
java -version
then

当然有更加复杂的,看看别人脚本怎么写的,你也行, https://git.oschina.net/ipvb/ServiceLauncher/blob/master/launcher 这里有个比较复杂的脚本,可以看看。

引用来自“guangzhen”的评论

谢谢您!我看了您推荐的文章,真看不懂啊!

能不能请您先教教我如何用javac编译整个java工程,我现在急于想解决这个问题,谢谢啦!!!


#!/bin/sh
# Define some constants
ONSSERVER=ONSServer
PROJECT_PATH=/root/iot-oid
JAR_PATH=$PROJECT_PATH/lib
BIN_PATH=$PROJECT_PATH/bin
SRC_PATH=$PROJECT_PATH/src/$ONSSERVER

# First remove the sources.list file if it exists and then create the sources file of the project
rm -f $SRC_PATH/sources
find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list

# First remove the ONSServer directory if it exists and then create the bin directory of ONSServer
rm -rf $BIN_PATH/$ONSSERVER
mkdir $BIN_PATH/$ONSSERVER

# Compile the project
javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list



这个文件你可以保存好,然后 chmod +x ./shell 运行


javac -d YourDir -classpath xx.jar xxxx.java xx.java  这个命令的简单的看就是 YourDir 你的生成文件的位置, -classpath 就是你引入的 jar 的路径, xxx.java 就是源文件

javac 的用法:

用法: javac <options> <source files>
其中, 可能的选项包括:
  -g                         生成所有调试信息
  -g:none                    不生成任何调试信息
  -g:{lines,vars,source}     只生成某些调试信息
  -nowarn                    不生成任何警告
  -verbose                   输出有关编译器正在执行的操作的消息
  -deprecation               输出使用已过时的 API 的源位置
  -classpath <路径>            指定查找用户类文件和注释处理程序的位置
  -cp <路径>                   指定查找用户类文件和注释处理程序的位置
  -sourcepath <路径>           指定查找输入源文件的位置
  -bootclasspath <路径>        覆盖引导类文件的位置
  -extdirs <目录>              覆盖所安装扩展的位置
  -endorseddirs <目录>         覆盖签名的标准路径的位置
  -proc:{none,only}          控制是否执行注释处理和/或编译。
  -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
  -processorpath <路径>        指定查找注释处理程序的位置
  -parameters                生成元数据以用于方法参数的反射
  -d <目录>                    指定放置生成的类文件的位置
  -s <目录>                    指定放置生成的源文件的位置
  -h <目录>                    指定放置生成的本机标头文件的位置
  -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  -encoding <编码>             指定源文件使用的字符编码
  -source <发行版>              提供与指定发行版的源兼容性
  -target <发行版>              生成特定 VM 版本的类文件
  -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      输出标准选项的提要
  -A关键字[=值]                  传递给注释处理程序的选项
  -X                         输出非标准选项的提要
  -J<标记>                     直接将 <标记> 传递给运行时系统
  -Werror                    出现警告时终止编译
  @<文件名>                     从文件读取选项和文件名




0
同一派

引用来自“Force武装卫队”的评论

shell 脚本就是将 各种命令通过一定的逻辑语句组合起来,最简单的有

#!/bin/bash

echo "Helloworld"



复杂的有
#!/bin/bash

javabin=$(which java)

if test -e $javabin
echo "Found java bin in your path."
java -version
then

当然有更加复杂的,看看别人脚本怎么写的,你也行, https://git.oschina.net/ipvb/ServiceLauncher/blob/master/launcher 这里有个比较复杂的脚本,可以看看。

引用来自“guangzhen”的评论

谢谢您!我看了您推荐的文章,真看不懂啊!

能不能请您先教教我如何用javac编译整个java工程,我现在急于想解决这个问题,谢谢啦!!!

引用来自“Force武装卫队”的评论


#!/bin/sh
# Define some constants
ONSSERVER=ONSServer
PROJECT_PATH=/root/iot-oid
JAR_PATH=$PROJECT_PATH/lib
BIN_PATH=$PROJECT_PATH/bin
SRC_PATH=$PROJECT_PATH/src/$ONSSERVER

# First remove the sources.list file if it exists and then create the sources file of the project
rm -f $SRC_PATH/sources
find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list

# First remove the ONSServer directory if it exists and then create the bin directory of ONSServer
rm -rf $BIN_PATH/$ONSSERVER
mkdir $BIN_PATH/$ONSSERVER

# Compile the project
javac -d $BIN_PATH/$ONSSERVER -classpath $JAR_PATH/jdom.jar:$JAR_PATH/oro-2.0.8.jar @$SRC_PATH/sources.list



这个文件你可以保存好,然后 chmod +x ./shell 运行


javac -d YourDir -classpath xx.jar xxxx.java xx.java  这个命令的简单的看就是 YourDir 你的生成文件的位置, -classpath 就是你引入的 jar 的路径, xxx.java 就是源文件

javac 的用法:

用法: javac <options> <source files>
其中, 可能的选项包括:
  -g                         生成所有调试信息
  -g:none                    不生成任何调试信息
  -g:{lines,vars,source}     只生成某些调试信息
  -nowarn                    不生成任何警告
  -verbose                   输出有关编译器正在执行的操作的消息
  -deprecation               输出使用已过时的 API 的源位置
  -classpath <路径>            指定查找用户类文件和注释处理程序的位置
  -cp <路径>                   指定查找用户类文件和注释处理程序的位置
  -sourcepath <路径>           指定查找输入源文件的位置
  -bootclasspath <路径>        覆盖引导类文件的位置
  -extdirs <目录>              覆盖所安装扩展的位置
  -endorseddirs <目录>         覆盖签名的标准路径的位置
  -proc:{none,only}          控制是否执行注释处理和/或编译。
  -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
  -processorpath <路径>        指定查找注释处理程序的位置
  -parameters                生成元数据以用于方法参数的反射
  -d <目录>                    指定放置生成的类文件的位置
  -s <目录>                    指定放置生成的源文件的位置
  -h <目录>                    指定放置生成的本机标头文件的位置
  -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  -encoding <编码>             指定源文件使用的字符编码
  -source <发行版>              提供与指定发行版的源兼容性
  -target <发行版>              生成特定 VM 版本的类文件
  -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      输出标准选项的提要
  -A关键字[=值]                  传递给注释处理程序的选项
  -X                         输出非标准选项的提要
  -J<标记>                     直接将 <标记> 传递给运行时系统
  -Werror                    出现警告时终止编译
  @<文件名>                     从文件读取选项和文件名




谢谢谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!非常感谢!

我先按照您说的鼓捣鼓捣,

有些模糊的地方想再问问您,那个-classpath是自己的项目工程中所依赖的jar文件路径吗,还有就是

find $SRC_PATH/com -name *.java > $SRC_PATH/sources.list

这句命令是做什么用的,我这样写对吗?

find $SRC_PATH/com -name *.java >> $SRC_PATH/sources.list

麻烦您了,再次感谢!!!!
同一派
回复 @Force武装卫队 : 谢谢您!!!谢谢!!!
Force武装卫队
Force武装卫队
find 这个命令是找到所有的 java 源文件 然后保存文件名,javac 从 sources.list 读取源文件路径。
0
simbasailor
simbasailor

直接命令编译的话,为啥不用makefile?

了解makefile的规则也是很简单的,比直接用shell通用些吧。

返回顶部
顶部