Java 无法在我的jar中加载本地jar
我正在为此绞尽脑汁,但找不到任何解决办法。 我正在使用jboss-fuse-6.1.0.redhat-379服务器,并在jboss_home/deploy/folder中部署我的jar 我遇到的问题是,在运行应用程序时,无法加载oracle ojdbc jar。我已尝试在本地存储库中添加此ojdbc14.jar,然后在POM中添加依赖项,如:Java 无法在我的jar中加载本地jar,java,maven,jboss6.x,jbossfuse,ojdbc,Java,Maven,Jboss6.x,Jbossfuse,Ojdbc,我正在为此绞尽脑汁,但找不到任何解决办法。 我正在使用jboss-fuse-6.1.0.redhat-379服务器,并在jboss_home/deploy/folder中部署我的jar 我遇到的问题是,在运行应用程序时,无法加载oracle ojdbc jar。我已尝试在本地存储库中添加此ojdbc14.jar,然后在POM中添加依赖项,如: <dependency> <groupId>com.oracle</groupId> <arti
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
在
pom.xml
中使用系统
范围的依赖项时,依赖项的jar文件不会打包到二进制文件中。换句话说,jar不在类路径上
范围。然后odbc jar必须位于JBoss的某个lib文件夹中,类似于Tomcat中的lib文件夹
将
odbc jar安装到本地Maven存储库中,然后使用默认范围包含依赖项必须放置在文件系统中的特定路径上,我会尝试在运行时将jar文件添加到类路径中。在与您不同的另一个上下文中,我能够使用以下代码片段部署和运行我的库
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;
}
private boolean addJarToClasspath(文件jarFile)
{
尝试
{
URLClassLoader URLClassLoader=(URLClassLoader)ClassLoader.getSystemClassLoader();
类urlClass=URLClassLoader.Class;
方法Method=urlClass.getDeclaredMethod(“addURL”,新类[]{URL.Class});
方法setAccessible(true);
invoke(urlClassLoader,新对象[]{jarFile.toURI().toURL()});
System.out.println(jarFile.getAbsolutePath()+“动态添加到类路径”);
返回true;
}
捕获(例外e)
{
e、 printStackTrace();
返回false;
}
}
私有布尔值isJarOnClassPath(文件jarFile)
{
URLClassLoader URLClassLoader=(URLClassLoader)ClassLoader.getSystemClassLoader();
URL[]URL=urlClassLoader.getURLs();
用于(URL:URL)
{
File File=新文件(url.getFile());
if(file.getPath().endsWith(jarFile.getName()))
{
System.out.println(jarFile.getAbsolutePath()+“在类路径上”);
返回true;
}
}
返回false;
}
我有同样的问题,我解决了它
将此存储库放在pom文件中
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
科德尔
https://code.lds.org/nexus/content/groups/main-repo
然后添加依赖项
<!-- ORACLE JDBC driver, need install yourself -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
com.oracle
ojdbc6
11.2.0.1.0
您可以使用将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>
org.apache.felix
maven捆绑插件
真的
ojdbc6
无论如何,这不是一个好办法。我建议使用JPA或将Oracle JDBC驱动程序添加到
lib/
文件夹中,并通过系统包导出它们。您可以使用wrap协议在karaf中安装
osgi:install -s wrap:mvn:groupid/artifactid/version
我假设jar在类路径上,并且服务已经重新启动了?您可以试着运行
Class.forName(“oracle.jdbc.driver.OracleDriver”)代码>首次连接尝试之前的任何位置?这将有望创建一个新的驱动程序实例。请参阅第二种方法的说明,这是我强烈建议的。这是处理公共回购协议未提供的第三方LIB的专业方法。只有当这真的不起作用时,我们才应该讨论第三个问题,这实际上是一个糟糕的解决办法。但实际上只有到那时。也许Oracle本身也提供了一个有用的信息:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>ojdbc6</Embed-Dependency>
</instructions>
</configuration>
</plugin>
osgi:install -s wrap:mvn:groupid/artifactid/version