I currently only have capabilities and requirements in my bundles manifest and will be adding them to my features. Thank you for the example. I have been making progress and the validation has been useful. I thought I was good because everything runs in pax exam and my old way of building a custom karaf distribution worked but validation is finding things I did not know about. Here is the start of my features file that I have now that I am working through the issues with.
<features name="aardvark" xmlns=" http://karaf.apache.org/xmlns/features/v1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0"> <feature name="frameworkcapabilities" description="Felix Requirements For AARDVARK" version="1.0.0"> <feature prerequisite="true">framework</feature> <capability>osgi.ee;effective:=active;osgi.ee ="JavaSE";version="1.8"</capability> <capability>osgi.service;effective:=active;objectClass="org.osgi.service.log.LogService"</capability> </feature> <feature name="aardvarkfelixbundles" description="Felix Requirements For AARDVARK" version="1.0.0"> <feature prerequisite="true">frameworkcapabilities</feature> <bundle>mvn:javax.servlet/javax.servlet-api/3.1.0</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.http.api/3.0.0</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.coordinator/1.0.2</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.eventadmin/1.4.4</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.metatype/1.1.2</bundle> </feature> <feature name="aardvarkconfigurerbundles" description="Configuration Requirements For AARDVARK" version="1.0.0"> <feature prerequisite="true">aardvarkfelixbundles</feature> <bundle>mvn:org.osgi/osgi.configurer.provider/1.0.0.201404171643</bundle> <bundle>mvn:osgi.enroute/configurer.simple.provider/1.2.2</bundle> </feature> <feature name="aardvarkhttpbundles" description="HTTP Requirements For AARDVARK" version="1.0.0"> <feature prerequisite="true">scr</feature> <feature prerequisite="true">aardvarkconfigurerbundles</feature> <bundle>mvn:org.apache.felix/org.apache.felix.http.servlet-api/1.1.2</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.http.base/3.0.4</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.http.whiteboard/3.0.0</bundle> <bundle>mvn:org.apache.felix/org.apache.felix.http.jetty/3.1.4</bundle> <bundle>mvn:org.apache.httpcomponents/httpcore-osgi/4.4.4</bundle> <bundle>mvn:org.apache.httpcomponents/httpclient-osgi/4.5.1</bundle> <bundle>mvn:osgi.enroute/dto.bndlib.provider/1.0.0</bundle> <bundle>mvn:osgi.enroute/web.simple.provider/1.3.3</bundle> <bundle>mvn:osgi.enroute/executor.simple.provider/1.0.0</bundle> </feature> A sample issue that the validator found is DEBUG] Candidate permutation failed due to a conflict between imports; will try another if possible. (Uses constraint violation. Unable to resolve resource com.eclipsesource.jaxrs.publisher [com.eclipsesource.jaxrs.publisher/5.3.0.201512270850] because it is exposed to package 'javax.servlet.http' from resources javax.servlet-api [javax.servlet-api/3.1.0] and org.apache.felix.http.servlet-api [org.apache.felix.http.servlet-api/1.1.2] via two dependency chains. Chain 1: com.eclipsesource.jaxrs.publisher [com.eclipsesource.jaxrs.publisher/5.3.0.201512270850] import: (&(osgi.wiring.package=javax.servlet.http)(version>=2.3.0)(!(version>=4.0.0))) | export: osgi.wiring.package: javax.servlet.http javax.servlet-api [javax.servlet-api/3.1.0] Chain 2: com.eclipsesource.jaxrs.publisher [com.eclipsesource.jaxrs.publisher/5.3.0.201512270850] import: (&(osgi.wiring.package=org.osgi.service.http)(version>=1.2.0)(!(version>=2.0.0))) | export: osgi.wiring.package=org.osgi.service.http; uses:=javax.servlet.http org.apache.felix.http.api [org.apache.felix.http.api/3.0.0] import: (&(osgi.wiring.package=javax.servlet.http)(version>=3.1.0)(!(version>=4.0.0))) | export: osgi.wiring.package: javax.servlet.http org.apache.felix.http.servlet-api [org.apache.felix.http.servlet-api/1.1.2]) because I am including <bundle>mvn:org.apache.felix/org.apache.felix.http.servlet-api/1.1.2</bundle> and <bundle>mvn:javax.servlet/javax.servlet-api/3.1.0</bundle>. This problem never showed itself before but I can see how it would be an issue. On Tue, Mar 1, 2016 at 9:05 AM, Mike Rumpf <[email protected]> wrote: > Capabalities are evaluated in both directions. That works fine in my > environment. > > A Feature example with capability could look like this: > > > > Did you try to add the log dependency as in above example? > > Can you post your feature definition? > > Mike > > > David Daniel wrote > > I think I have figured out where I was going wrong. If I include > > framework > > as a prerequisite then it gives me an error message that I believe is > more > > accurate. > > > > [ERROR] Failed to execute goal > > org.apache.karaf.tooling:karaf-maven-plugin:4.0.4:assembly > > (default-assembly) on project server-installer: Unable to build assembly: > > Unable to resolve root: missing requirement [root] osgi.identity; > > osgi.identity=aardvarkconfigurerbundles; type=karaf.feature; version=0; > > > filter:="(&(osgi.identity=aardvarkconfigurerbundles)(type=karaf.feature)(version>=0.0.0))" > > [caused by: Unable to resolve aardvarkconfigurerbundles/1.0.0: missing > > requirement [aardvarkconfigurerbundles/1.0.0] osgi.identity; > > osgi.identity=osgi.enroute.configurer.simple.provider; type=osgi.bundle; > > version="[1.2.2.201509211431,1.2.2.201509211431]"; resolution:=mandatory > > [caused by: Unable to resolve > > osgi.enroute.configurer.simple.provider/1.2.2.201509211431: missing > > requirement [osgi.enroute.configurer.simple.provider/1.2.2.201509211431] > > osgi.service; filter:="(objectClass=org.osgi.service.log.LogService)"; > > effective:=active]] -> [Help 1] > > > > I am using the 1.3.0 version of features and that has the ability to add > > requirements and capabilities. > > > http://karaf.apache.org/manual/latest/users-guide/provisioning-schema.html > > I am wondering if the veriffier is taking the requirements out of the > > bundles but is not taking the capabilities out of the bundles. I was > > hoping that if I put a dummy frameworkcapabilities feature in that just > > specified that it has the capabilities that the verifier feels it is > > missing then I might be ok. Does anyone have a framework 1.3.0 sample > > with > > requirements and capabilities. > > > > On Tue, Mar 1, 2016 at 6:39 AM, Mike Rumpf < > > > mikey99@ > > > > wrote: > > > >> The correct way is to work with feature dependencies, e.g. > >> > >> > >> > >> (in the \src\main\feature\feature.xml) > >> > >> Than the resolver will be able to resolve the missing dependencies. > >> However > >> from my experience setting the *prerequisite* property to *true *will > >> lead > >> to various build errors. (Don't know if you did that though). > >> > >> You also might need to use Maven-Excludes in your feature-pom to avoid > >> some > >> dependency-pitfalls. > >> > >> If you add your features to the boot-features in the assembly they won't > >> be > >> verified (contrary to being listed under startup features). Avoid > >> non-osgi > >> bundles in your features. (This would lead to the wrap feature being > >> verified and the build will fail because of missing > >> log-implementation...) > >> > >> The Karaf-Maven-Plugin is quite tricky to configure right. > >> > >> Hope that helps, > >> Mike > >> > >> > >> > >> > >> -- > >> View this message in context: > >> > http://karaf.922171.n3.nabble.com/Issue-building-with-karaf-maven-plugin-tp4045602p4045642.html > >> Sent from the Karaf - User mailing list archive at Nabble.com. > >> > > > > > > -- > View this message in context: > http://karaf.922171.n3.nabble.com/Issue-building-with-karaf-maven-plugin-tp4045602p4045649.html > Sent from the Karaf - User mailing list archive at Nabble.com. >
