如何从Cygwin bash shell启动在Eclipse中开发的java CLI程序?

如何从Cygwin bash shell启动在Eclipse中开发的java CLI程序?,java,eclipse,cygwin,classpath,Java,Eclipse,Cygwin,Classpath,我想在这里分享我的一个有用的脚本。 我正在Eclipse下开发一些java CLI软件。 有时,我发现使用自定义参数从命令行运行它(在我的例子中使用Cygwin),而不是在eclipse中创建一个新的“运行配置”非常有用 我的eclipse项目依赖于其他一些“核心”项目和一堆LIB 所以我需要一个bash启动器…所以这里是我的解决方案: 我曾经在一个启动脚本中硬编码整个类路径,但是维护起来很痛苦 最近,我编写了一个bash脚本,它自动递归地解析“.classpath”文件并动态生成类路径。这样,

我想在这里分享我的一个有用的脚本。 我正在Eclipse下开发一些java CLI软件。 有时,我发现使用自定义参数从命令行运行它(在我的例子中使用Cygwin),而不是在eclipse中创建一个新的“运行配置”非常有用

我的eclipse项目依赖于其他一些“核心”项目和一堆LIB


所以我需要一个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配置的项目变得简单。