如何从Cygwin bash shell启动在Eclipse中开发的java CLI程序?
我想在这里分享我的一个有用的脚本。 我正在Eclipse下开发一些java CLI软件。 有时,我发现使用自定义参数从命令行运行它(在我的例子中使用Cygwin),而不是在eclipse中创建一个新的“运行配置”非常有用 我的eclipse项目依赖于其他一些“核心”项目和一堆LIB如何从Cygwin bash shell启动在Eclipse中开发的java CLI程序?,java,eclipse,cygwin,classpath,Java,Eclipse,Cygwin,Classpath,我想在这里分享我的一个有用的脚本。 我正在Eclipse下开发一些java CLI软件。 有时,我发现使用自定义参数从命令行运行它(在我的例子中使用Cygwin),而不是在eclipse中创建一个新的“运行配置”非常有用 我的eclipse项目依赖于其他一些“核心”项目和一堆LIB 所以我需要一个bash启动器…所以这里是我的解决方案: 我曾经在一个启动脚本中硬编码整个类路径,但是维护起来很痛苦 最近,我编写了一个bash脚本,它自动递归地解析“.classpath”文件并动态生成类路径。这样,
所以我需要一个bash启动器…所以这里是我的解决方案: 我曾经在一个启动脚本中硬编码整个类路径,但是维护起来很痛苦 最近,我编写了一个bash脚本,它自动递归地解析“.classpath”文件并动态生成类路径。这样,我的发射器总是最新的。我还添加了一个“debug”选项,它以远程调试模式启动Java 希望这对别人有帮助
#! /usr/bin/bash
# Eclipse CLI program launcher.
# ----------------------------------------------------------
# Constants
# ----------------------------------------------------------
# Main class
CLASS=your.main.class.Here
# ----------------------------------------------------------
# Parse arguments
# ----------------------------------------------------------
# Debugger mode ?
if [ "$1" = "debug" ]
then
shift
DEBUG_OPTIONS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=3409,suspend=y"
fi
# -------------------------------------------------------
# Setup the classpath from eclipse .classpath files
# -------------------------------------------------------
# Init classpath
CLASSPATH=""
# Process a single .classpath file
# This is a recursive function
# Arguments:
# $1 : Dir path where to search for a ".classpath" file
function build_classpath() {
# Aliases to arguments
local folder="$1"
local file="$folder/.classpath"
# ".classpath" file does not exists ? => exit
if [ ! -f "$file" ]
then
return
fi
# Parse the file with sed
# return a list of <type>:<path> pairs
local lines=`sed -ne 's/^.*kind="\(.*\)"\s\s*path="\(.*\)".*$/\1:\2/gp' $file`
# Loop on lines
for line in $lines
do
# Split the type and path values
local type=${line%:*}
local path=${line#*:}
# Switch on type
case $type in
"lib" )
CLASSPATH=$CLASSPATH:$folder/$path
;;
"output" )
CLASSPATH=$CLASSPATH:$folder/$path
;;
"src" )
# Recursive call for other projects, relative to the workspace (the parent dir)
build_classpath "..$path"
;;
esac
done
}
# Start building the classpath from the current project dir
build_classpath .
# Call java
java $DEBUG_OPTIONS -Xmx1024m -cp `cygpath -wp $CLASSPATH` $CLASS $@
#/usr/bin/bash
#eclipsecli程序启动器。
# ----------------------------------------------------------
#常数
# ----------------------------------------------------------
#主类
CLASS=your.main.CLASS.Here
# ----------------------------------------------------------
#解析参数
# ----------------------------------------------------------
#调试器模式?
如果[“$1”=“调试”]
然后
转移
DEBUG_OPTIONS=“-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,address=3409,suspend=y”
fi
# -------------------------------------------------------
#从eclipse.classpath文件设置类路径
# -------------------------------------------------------
#初始化类路径
CLASSPATH=“”
#处理单个.classpath文件
#这是一个递归函数
#论据:
#$1:Dir搜索“.classpath”文件的路径
函数构建\类路径(){
#参数的别名
本地文件夹=“$1”
本地文件=“$folder/.classpath”
#“.classpath”文件不存在?=>退出
如果[!-f“$file”]
然后
返回
fi
#使用sed解析文件
#返回:对的列表
本地行=`sed-ne's/^.*kind=“\(.*\)”\s\s*path=“\(.*\)”*$/\1:\2/gp'$file`
#在线循环
对于$line中的line
做
#拆分类型和路径值
本地类型=${line%:*}
本地路径=${line#*:}
#接通型
案例$输入
“lib”)
CLASSPATH=$CLASSPATH:$folder/$path
;;
“产出”)
CLASSPATH=$CLASSPATH:$folder/$path
;;
“src”)
#对其他项目的递归调用,相对于工作区(父目录)
生成类路径“.$path”
;;
以撒
完成
}
#从当前项目目录开始构建类路径
构建类路径。
#调用java
java$DEBUG_选项-Xmx1024m-cp`cygpath-wp$CLASSPATH`$CLASS$@
您也可以看看maven——exec任务使从命令行(cygwin/bash/dos/where)启动maven配置的项目变得简单。