【问题标题】:Karaf / Maven - class not found at runtimeKaraf / Maven - 运行时找不到类
【发布时间】:2015-08-10 23:36:01
【问题描述】:

我已经用 maven 为 Karaf 构建了一个捆绑包,并包含了 org.postgresql 依赖项

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.4-1201-jdbc41</version>
</dependency>

我还将最新版本的 jar 包含到 Karaf 的 lib/ext/ 目录中。 捆绑包已正确加载。但是,在运行时,当捆绑包尝试加载驱动程序时:

Class.forName("org.postgresql.Driver");

我收到以下错误:

2015-05-28 14:36:07,218 | ERROR | qtp1270203840-47 | MyBundleServlet               | 124 - MyBundle - 1.0.0.SNAPSHOT | org.postgresql.Driver not found by MyBundle [124]
java.lang.ClassNotFoundException: org.postgresql.Driver not found by MyBundle [124]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532)[org.apache.felix.framework-4.2.1.jar:]
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)[org.apache.felix.framework-4.2.1.jar:]
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)[:1.7.0_75]
at java.lang.Class.forName0(Native Method)[:1.7.0_75]
at java.lang.Class.forName(Class.java:191)[:1.7.0_75]
...

我还有什么要补充的吗?

【问题讨论】:

  • 在我看来这是一个不同的问题,因为我需要 karaf 才能看到其 lib/ext 文件夹中的库..
  • 你确定吗?那个问题和你的问题都围绕着让一个包可以访问数据库驱动程序......这就是为什么我认为这对你来说是一个很好的地方。
  • 是的,谢谢,反正我试过了,还是不行。事实上,我不想将我的依赖项嵌入到包中,而是让 karaf 独立加载它..
  • 在这种情况下,您应该首先在 POM 中使用 &lt;scope&gt;provided&lt;/scope&gt; 声明依赖关系。除此之外我对卡拉夫不熟悉,不知道需要做什么......

标签: java postgresql maven jdbc apache-karaf


【解决方案1】:

我通过嵌入依赖项解决了问题,在我的pom.xml 中使用了相应的标签 (&lt;Embed-Dependency&gt;)。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Import-Package>*;resolution:=optional,!org.postgresql</Import-Package>
                    <Embed-Dependency>postgresql</Embed-Dependency>
                </instructions>
            </configuration>
        </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skipTests>${skipTests}</skipTests>
            </configuration>
          </plugin>
    </plugins>
</build>

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 2018-04-02
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多