无法在我的jar中加载本地jar

时间:2017-02-19 08:12:49

标签: java maven jboss6.x jbossfuse ojdbc

我正在敲打这个,但找不到任何解决方案。 我正在使用 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:找不到合适的驱动程序   JDBC:预言:瘦:@ // IP:端口/ 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>

但仍然相同&#34;找不到合适的驱动程序&#34;信息。 任何帮助如何在我的jar中添加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

4 个答案:

答案 0 :(得分:1)

我有同样的问题,我解决了它

将此存储库放在您的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>

答案 1 :(得分:0)

system中使用pom.xml作用域依赖项时,依赖项的jar文件不会打包到二进制文件中。换句话说,jar不在类路径上。

  1. 尝试使用provided范围的Maven。然后odbc-jar必须在JBoss的某个lib文件夹中,类似于Tomcat中的lib文件夹。

  2. 您可以将install odbc-jar放入本地Maven存储库,然后在默认范围内包含依赖项。

  3. 如果您的方案是,该jar不可部署,因为它must被放置在文件系统中的特定路径上,我会尝试在运行时将jar-File添加到类路径。在另一个上下文中,我能够使用以下代码片段部署和运行我的lib。

  4. 在你找到更好的东西之前,它有望成为一种解决方法:

    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;
    }
    

答案 2 :(得分:0)

您可以使用Maven Bundle Plugin在包中嵌入JAR。 这还将负责在清单中添加正确的OSGi标头。

<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/文件夹并通过系统包导出它们。

答案 3 :(得分:0)

您可以使用wrap协议在karaf中安装

osgi:install -s wrap:mvn:groupid/artifactid/version