无法在我的 jar 中加载本地 jar
Unable to load local jar inside my jar
我正在为此苦思冥想,但找不到任何解决方案。
我正在使用 jboss-fuse-6.1.0.redhat-379 服务器并在 Jboss_home/deploy/ 文件夹
中部署我的 jar
我遇到的问题是,当我 运行 我的应用程序时,我无法加载 oracle ojdbc jar。我尝试在我的本地存储库中添加这个 ojdbc14.jar,然后在 POM 中添加依赖项,如:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
它成功解决了导入问题,但是当我在 Jboss 和 运行 我的应用程序中部署我的 jar 时,它给出了一个错误:
java.sql.SQLException: No suitable driver found for
jdbc:oracle:thin:@//ip:port/some_name
我也试过在 POM 中添加这样的 ojdbc.jar:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/ojdbc14-10.2.0.4.0.jar</systemPath>
</dependency>
但仍然收到相同的 "No suitable driver found" 消息。
任何帮助我如何在我的罐子里添加 ojdbc.jar?
**** 更新 ****
Java代码:
try
{
// File CP_file = new File("/home/path/to/ojdbc14.jar");
// DBFactory dbMethod = new DBFactory();
// dbMethod.addJarToClasspath(CP_file);
Class.forName ("oracle.jdbc.OracleDriver");
String dbURL = "jdbc:oracle:thin:@//ip:port/name";
String userID = "userid";
String password = "pass";
// dbMethod.isJarOnClassPath(CP_file);
Connection dbConnection=DriverManager.getConnection(dbURL,userID,password);
// getting exception on above line
当您在 pom.xml
中使用 system
范围的依赖项时,依赖项的 jar 文件不会打包到您的二进制文件中。换句话说,jar 不在类路径中。
尝试使用 Maven 的 provided
-scope。然后 odbc-jar 必须在 JBoss 的某个 lib 文件夹中,类似于 Tomcat 中的 lib-folder。
您可以将 install
odbc-jar 放入您的本地 Maven 存储库,然后包含 default-scope.
[=30= 的依赖项]
如果您的情况是,jar 不可部署,因为它 must
被放置在文件系统中的特定路径上,我会尝试添加 jar-File 在 运行 时间内添加到类路径。在与您不同的上下文中,我能够使用以下代码段部署和 运行 我的库。
在您找到更好的东西之前,希望它能作为 work-around:
private boolean addJarToClasspath( File jarFile )
{
try
{
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<?> urlClass = URLClassLoader.class;
Method method = urlClass.getDeclaredMethod( "addURL", new Class<?>[] { URL.class } );
method.setAccessible( true );
method.invoke( urlClassLoader, new Object[] { jarFile.toURI().toURL() } );
System.out.println( jarFile.getAbsolutePath() + " dynamically added to classpath" );
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
private boolean isJarOnClassPath( File jarFile )
{
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
URL[] urls = urlClassLoader.getURLs();
for ( URL url : urls )
{
File file = new File( url.getFile() );
if ( file.getPath().endsWith( jarFile.getName() ) )
{
System.out.println( jarFile.getAbsolutePath() + " is on classpath" );
return true;
}
}
return false;
}
我也有同样的问题,我解决了
将此存储库放入您的 pom 文件
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
然后添加你的依赖
<!-- ORACLE JDBC driver, need install yourself -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
您可以使用 Maven Bundle Plugin 在您的包中嵌入一个 JAR。
这还将负责在您的清单中添加正确的 OSGi headers。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>ojdbc6</Embed-Dependency>
</instructions>
</configuration>
</plugin>
总之这不是一个好的方法。我建议使用 JPA 或将 Oracle JDBC 驱动程序添加到 lib/
文件夹并通过系统包导出它们。
你可以使用 wrap 协议在 karaf 中安装
osgi:install -s wrap:mvn:groupid/artifactid/version
我正在为此苦思冥想,但找不到任何解决方案。 我正在使用 jboss-fuse-6.1.0.redhat-379 服务器并在 Jboss_home/deploy/ 文件夹
中部署我的 jar我遇到的问题是,当我 运行 我的应用程序时,我无法加载 oracle ojdbc jar。我尝试在我的本地存储库中添加这个 ojdbc14.jar,然后在 POM 中添加依赖项,如:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
它成功解决了导入问题,但是当我在 Jboss 和 运行 我的应用程序中部署我的 jar 时,它给出了一个错误:
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@//ip:port/some_name
我也试过在 POM 中添加这样的 ojdbc.jar:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/ojdbc14-10.2.0.4.0.jar</systemPath>
</dependency>
但仍然收到相同的 "No suitable driver found" 消息。 任何帮助我如何在我的罐子里添加 ojdbc.jar?
**** 更新 ****
Java代码:
try
{
// File CP_file = new File("/home/path/to/ojdbc14.jar");
// DBFactory dbMethod = new DBFactory();
// dbMethod.addJarToClasspath(CP_file);
Class.forName ("oracle.jdbc.OracleDriver");
String dbURL = "jdbc:oracle:thin:@//ip:port/name";
String userID = "userid";
String password = "pass";
// dbMethod.isJarOnClassPath(CP_file);
Connection dbConnection=DriverManager.getConnection(dbURL,userID,password);
// getting exception on above line
当您在 pom.xml
中使用 system
范围的依赖项时,依赖项的 jar 文件不会打包到您的二进制文件中。换句话说,jar 不在类路径中。
尝试使用 Maven 的
provided
-scope。然后 odbc-jar 必须在 JBoss 的某个 lib 文件夹中,类似于 Tomcat 中的 lib-folder。您可以将
[=30= 的依赖项]install
odbc-jar 放入您的本地 Maven 存储库,然后包含 default-scope.如果您的情况是,jar 不可部署,因为它
must
被放置在文件系统中的特定路径上,我会尝试添加 jar-File 在 运行 时间内添加到类路径。在与您不同的上下文中,我能够使用以下代码段部署和 运行 我的库。
在您找到更好的东西之前,希望它能作为 work-around:
private boolean addJarToClasspath( File jarFile )
{
try
{
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<?> urlClass = URLClassLoader.class;
Method method = urlClass.getDeclaredMethod( "addURL", new Class<?>[] { URL.class } );
method.setAccessible( true );
method.invoke( urlClassLoader, new Object[] { jarFile.toURI().toURL() } );
System.out.println( jarFile.getAbsolutePath() + " dynamically added to classpath" );
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
private boolean isJarOnClassPath( File jarFile )
{
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
URL[] urls = urlClassLoader.getURLs();
for ( URL url : urls )
{
File file = new File( url.getFile() );
if ( file.getPath().endsWith( jarFile.getName() ) )
{
System.out.println( jarFile.getAbsolutePath() + " is on classpath" );
return true;
}
}
return false;
}
我也有同样的问题,我解决了
将此存储库放入您的 pom 文件
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
然后添加你的依赖
<!-- ORACLE JDBC driver, need install yourself -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
您可以使用 Maven Bundle Plugin 在您的包中嵌入一个 JAR。 这还将负责在您的清单中添加正确的 OSGi headers。
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>ojdbc6</Embed-Dependency>
</instructions>
</configuration>
</plugin>
总之这不是一个好的方法。我建议使用 JPA 或将 Oracle JDBC 驱动程序添加到 lib/
文件夹并通过系统包导出它们。
你可以使用 wrap 协议在 karaf 中安装
osgi:install -s wrap:mvn:groupid/artifactid/version