I'm trying to get a simple jbang with dependency on class path sample working.
When I run the exact same java file (except for bulleted differences below) via jshell under Java 17, passing the same class path, it succeeds.
- The function definition in the jshell version is
static void b() throws ClassNotFoundException
. - After starting jshell, I invoked it via
B.b()
jshell 'D:\path\B.java' --class-path "C:\Program Files\SQL Anywhere 17\Java\sajdbc4.jar"
I added output of class path, my class path is present when running via jbang. I'm passing the java version to eliminate that difference.
jbang --java 17 --cp 'C:\Program Files\SQL Anywhere 17\Java\sajdbc4.jar' D:\path\B.java
Output follows. "No suitable driver" indicates it can't load the dependent jar that's on the class path:
C:\Users__.jbang\cache\jars\B.java.e22a3a302f133969cf194e974e813de59d453fcca7dc31fadde218d8503ab273\B.jar;"C:\Program Files\SQL Anywhere 17\Java\sajdbc4.jar"
Error: No suitable driver found for jdbc:sqlanywhere:HOST=127.0.0.1;UID=*****;PWD=__
Here are the Java file contents:
///usr/bin/env jbang "$0" "$@" ; exit $?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class B
{
public static void main(String[] args)
{
System.out.println(System.getProperty("java.class.path"));
try (Connection conn = DriverManager.getConnection("jdbc:sqlanywhere:HOST=127.0.0.1;UID=*****;PWD=******");
PreparedStatement ps = conn.prepareStatement("select 1") )
{
try (ResultSet rs = ps.executeQuery())
{
if (rs.next())
{
System.out.println(rs.getInt(1));
}
}
}
catch (SQLException e)
{
System.out.println("Error: " + e.getMessage());
}
}
}