OS X上的SQL Developer 4.0.0 sqlcli命令抛出StringIndexOutOfBoundsException

时间:2013-09-10 02:52:04

标签: macos oracle-sqldeveloper

当我运行任何sqlcli命令时,在Darwin内核版本12.4.0上运行SQL Developer我收到以下错误:

box:sqldeveloper user$ ./sqlcli format input=sqlFile.sql output=outSqlFile.sql
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1911)
at oracle.dbtools.raptor.scriptrunner.utils.SqlCli.processArgs(SqlCli.java:43)
at oracle.dbtools.raptor.scriptrunner.utils.SqlCli.main(SqlCli.java:118)

有关从何处开始排查的想法?

1 个答案:

答案 0 :(得分:1)

release notesearly adopter release说:

  

可以报告所有SQL Developer 4.0早期采用者问题   Oracle SQL Developer论坛。使用 4.0EA1 标记主题。

话虽如此,看起来它期待连接字符串作为第一个参数,并且我猜测索引错误来自它寻找@符号(但它只是一个猜测,基于尝试一些价值观)。使用虚拟值我会得到一个不同的错误:

bash ./sqlcli a/b@c
Exception in thread "main" java.lang.NoClassDefFoundError: oracle/ide/Version
    at oracle.dbtools.db.DBUtil.<clinit>(DBUtil.java:1703)
    at oracle.dbtools.raptor.scriptrunner.utils.SqlCli.processArgs(SqlCli.java:49)
    at oracle.dbtools.raptor.scriptrunner.utils.SqlCli.main(SqlCli.java:118)
Caused by: java.lang.ClassNotFoundException: oracle.ide.Version
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 3 more

我安装了即时客户端并且DYLD_LIBRARY_PATH设置为所以我不确定那是什么。这是因为CP中的sqlcli设置错误; javatools版本应为12.1.2:

#CP=${CP}:modules/oracle.javatools_11.1.1/javatools-nodeps.jar
CP=${CP}:modules/oracle.javatools_12.1.2/javatools-nodeps.jar

有了这个改变,我开始得到关于连接的合理错误,并使用有效的连接字符串然后告诉我:

Exception in thread "main" java.io.FileNotFoundException: format.sql (No such file or directory)
...

所以它试图运行一个名为format的脚本,而不是格式化现有文件。我认为你使用的是错误的工具。

命令行客户端has been rewrittensdcli似乎有效。我刚刚下载并扩展了测试版,并安装了JDK 7u25,所以这可能与你需要做的不太匹配:

cd SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/bin
bash ./sdcli format input=/tmp/in.sql output=/tmp/out.sql

我需要第一次将JDK路径设置为/usr

Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk
/usr

...但不会在后续运行中。

 Oracle SQL Developer
 Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.

Sep 10, 2013 10:04:27 AM javax.ide.extension.spi.DefaultElementContext resolveResource
SEVERE: jar:/file:/Users/alex/Downloads/SQLDeveloper.app/Contents/Resources/sqldeveloper/sqldeveloper/extensions/oracle.sqldeveloper.migration.application.jar!/META-INF/extension.xml:16: Resource not found: '${SCRATCH_COMMAND_ICON}'.
Success!

SCRATCH_COMMAND_ICON错误是一个众所周知的'无害但令人讨厌'的问题,您可以忽略它。