使用预先安装的pax-jdbc-oracle定制Apache Karaf 4.0.4发行版

时间:2016-03-04 12:01:41

标签: java oracle maven jdbc apache-karaf

我正在尝试构建一个带有一些预装功能的自定义karaf发行版,因为我们没有想要部署它的互联网。

这是我们的pom:

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
     xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>

<groupId>yolo.name.so</groupId>
<artifactId>karaf</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>karaf-assembly</packaging>

<properties>
    <karaf.version>4.0.4</karaf.version>
    <!-- Karaf Maven Plugin does not have to be same as Karaf Server version
         For example, Karaf Maven Plugin 3.0.2 has bug uploading to password protected Nexus Repo
         So I used Karaf Maven Plugin 3.0.3 to build a Karaf 3.0.2 Server -->
    <karaf.plugin.version>${karaf.version}</karaf.plugin.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.reportEncoding>UTF-8</project.build.reportEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.karaf.features</groupId>
        <artifactId>framework</artifactId>
        <version>${karaf.version}</version>
        <type>kar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.karaf.features</groupId>
        <artifactId>standard</artifactId>
        <version>${karaf.version}</version>
        <classifier>features</classifier>
        <type>xml</type>
       <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf.karaf</groupId>
        <artifactId>apache-cxf</artifactId>
        <version>3.1.4</version>
        <classifier>features</classifier>
        <type>xml</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.ops4j.pax.jdbc</groupId>
        <artifactId>pax-jdbc</artifactId>
        <version>0.7.0</version>
        <scope>provided</scope>
       </dependency>
    <dependency>
        <groupId>org.ops4j.pax.jdbc</groupId>
        <artifactId>pax-jdbc-oracle</artifactId>
        <version>0.7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.karaf.features</groupId>
        <artifactId>enterprise</artifactId>
        <classifier>features</classifier>
        <type>xml</type>
        <version>${karaf.version}</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.karaf.tooling</groupId>
            <artifactId>karaf-maven-plugin</artifactId>
            <version>${karaf.plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <!-- ignoreDependencyFlag is true forces plugin to also
                download feature dependent libraries -->
                <ignoreDependencyFlag>true</ignoreDependencyFlag>
                <finalName>${project.artifactId}</finalName>
                <bootFeatures>
                    <feature>bundle</feature>
                    <feature>config</feature>
                    <feature>diagnostic</feature>
                    <feature>deployer</feature>
                    <feature>feature</feature>
                    <feature>jaas</feature>
                    <feature>shell</feature>
                    <feature>log</feature>
                    <feature>management</feature>
                    <feature>package</feature>
                    <feature>shell-compat</feature>
                    <feature>ssh</feature>
                    <feature>system</feature>
                    <feature>wrap</feature>
                    <feature>instance</feature>
                    <feature>kar</feature>
                    <!-- custom features -->
                    <feature>war</feature>
                    <feature>jdbc</feature>
                    <feature>cxf</feature>
                    <feature>cxf-rs-description-swagger2</feature>
                    <feature>service</feature>
                    <feature>eventadmin</feature>
                </bootFeatures>
                <!-- installedFeatures only installs the libraries in the ${KARAF_HOME}/system directory
                     but the user will have to start it up manually via Karaf command line feature:install
                -->
                <installedFeatures>
                    <feature>pax-jdbc</feature>
                    <feature>pax-jdbc-oracle</feature>
                </installedFeatures>
                <archiveZip>true</archiveZip>
            </configuration>
        </plugin>
    </plugins>
</build>

我们总是收到以下错误:

feature:install pax-jdbc-oracle 
    org.apache.karaf.shell.core[org.apache.karaf.shell.support.ShellUtil] : Exception caught while executing command
    org.osgi.service.resolver.ResolutionException: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=pax-jdbc-oracle; type=karaf.feature; version="[0.7.0,0.7.0]"; filter:="(&(osgi.identity=pax-jdbc-oracle)(type=karaf.feature)(version>=0.7.0)(version<=0.7.0))" [caused by: Unable to resolve pax-jdbc-oracle/0.7.0: missing requirement [pax-jdbc-oracle/0.7.0] osgi.identity; osgi.identity=org.ops4j.pax.jdbc.oracle; type=osgi.bundle; version="[0.7.0,0.7.0]"; resolution:=mandatory [caused by: Unable to resolve org.ops4j.pax.jdbc.oracle/0.7.0: missing requirement [org.ops4j.pax.jdbc.oracle/0.7.0] osgi.wiring.package; filter:="(osgi.wiring.package=oracle.jdbc.pool)"]]
        at org.apache.felix.resolver.ResolutionError.toException(ResolutionError.java:42)
        at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:235)
        at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:158)
        at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:216)
        at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:263)
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1089)
        at org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:985)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    Error executing command: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=pax-jdbc-oracle; type=karaf.feature; version="[0.7.0,0.7.0]"; filter:="(&(osgi.identity=pax-jdbc-oracle)(type=karaf.feature)(version>=0.7.0)(version<=0.7.0))" [caused by: Unable to resolve pax-jdbc-oracle/0.7.0: missing requirement [pax-jdbc-oracle/0.7.0] osgi.identity; osgi.identity=org.ops4j.pax.jdbc.oracle; type=osgi.bundle; version="[0.7.0,0.7.0]"; resolution:=mandatory [caused by: Unable to resolve org.ops4j.pax.jdbc.oracle/0.7.0: missing requirement [org.ops4j.pax.jdbc.oracle/0.7.0] osgi.wiring.package; filter:="(osgi.wiring.package=oracle.jdbc.pool)"]]

我们希望预先安装此功能,但不知何故,将它放在bootFeatures或installedFeatures下并不重要。

提供的范围/运行时也无关紧要。

2 个答案:

答案 0 :(得分:2)

由于许可原因,功能pax-jdbc-oracle无法打包oracle jdbc驱动程序。您必须提供自己的副本,并将其包含在您的发行版中。此驱动程序无法在maven中心访问,如果没有许可证,则无法下载。

请参阅:https://ops4j1.jira.com/wiki/display/PAXJDBC/Oracle+driver+adapter

答案 1 :(得分:0)

Oracle Maven Repository上没有Oracle JDBC驱动程序和UCP(Java连接池)。

有关从Oracle Maven存储库下载JDBC驱动程序的说明,请参阅以下blog