2016-03-04 305 views
0

我想建立一個預定義的功能,因爲我們沒有互聯網我們想要部署它的自定義karaf分佈。自定義Apache Karaf 4.0.4發佈與預裝pax-jdbc-oracle

這是我們的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無關緊要。

提供的作用域/運行時並不重要。

回答

0

Oracle JDBC驅動程序和UCP(Java的連接池)並非適用於甲骨文Maven倉庫。

有關從Oracle Maven存儲庫下載JDBC驅動程序的說明,請參閱以下blog