从Cygwin调用liquibase命令行

时间:2014-11-04 13:02:33

标签: bash liquibase

尝试从命令行(bash脚本)运行liquibase调用。如果我在服务器(Red Hat linux)上运行它,这是有效的,但如果我从cygwin提示符运行它,我会收到错误:

java -cp ../liquibase-core-3.1.1:../ojdbc6-11.2.0.3.jar liquibase.integration.commandline.Main --driver=oracle.jdbc.OracleDriver \
    --changeLogFile=database/master.xml --url=${schema_url} --username=${schema_username} --password=${schema_password} \
    --contexts=${schema_context}  migrate

我收到错误:

Error: Could not find or load main class liquibase.integration.commandline.Main

不明白为什么。

4 个答案:

答案 0 :(得分:1)

找到解决问题的方法。使用信息

创建了一个liquibase.properties文件
url: <url>
username: <username>
password: <password>
contexts: global,dev
driver: oracle.jdbc.OracleDriver
classpath: ../ojdbc6-11.2.0.3.jar
changeLogFile: database/master.xml

使用

调用liquibase CLI
java -jar ../liquibase-core-3.1.1.jar --defaultsFile=../foo/fum/liquibase.properties migrate

这在服务器和cygwin上都运行良好。

答案 1 :(得分:0)

问题是CYGWIN上的Java在解决PATH方面存在问题。要进行此添加

cygwinpath -wp

要解决此问题,请替换

java -cp ../liquibase-core-3.1.1:../ojdbc6-11.2.0.3.jar

java -classpath \`cygpath -wp ../liquibase-core-3.1.1:../ojdbc6-11.2.0.3.jar\`

请记住使用此标记cygwint -wp <path>`

包围

答案 2 :(得分:0)

问题出现是因为Java需要一个Windows样式路径,但liquibase脚本会发出一个unix样式路径。另见讨论how to run Java from cygwin。建议的解决方案是通过cygpath修复它。

根案例虽然有所不同。如果你查看liquibase的启动脚本,你会看到以下代码

# build classpath from all jars in lib
if [ -f /usr/bin/cygpath ]; then
  CP=.
  for i in "$LIQUIBASE_HOME"/liquibase*.jar; do
    i=`cygpath --windows "$i"`
    CP="$CP;$i"
  done
  for i in "$LIQUIBASE_HOME"/lib/*.jar; do
    i=`cygpath --windows "$i"`
    CP="$CP;$i"
  done
else
  if [[ $(uname) = MINGW* ]]; then
    CP_SEPARATOR=";"
  else
    CP_SEPARATOR=":"
  fi
  CP=.
  for i in "$LIQUIBASE_HOME"/liquibase*.jar; do
    CP="$CP""$CP_SEPARATOR""$i"
  done
  for i in "$LIQUIBASE_HOME"/lib/*.jar; do
    CP="$CP""$CP_SEPARATOR""$i"
  done
fi

这是脚本检查cygpath的存在,如果发现它将解决问题。很可能你缺少cygpath。

如果which cygpath导致/usr/bin/cygpath,那么一切都应按预期工作。否则你找到了根本原因。

这就提出了为什么缺少cygpath以及如何获取它的问题。在我的情况下,我删除了我的(过时的)git / gitbash安装并安装了最新版本。这附带了一个最新的gitbash,其中包括cygpath。

答案 3 :(得分:0)

在主目录中检查主类jar文件“ liquibase.jar”