{"id":193,"date":"2015-02-15T13:56:00","date_gmt":"2015-02-15T04:56:00","guid":{"rendered":"http:\/\/www.wingnest.com\/blog\/?p=193"},"modified":"2015-05-21T08:42:00","modified_gmt":"2015-05-20T23:42:00","slug":"osgi-%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b-bundle%e3%81%ae%e5%88%9d%e6%ad%a9%e7%9a%84%e3%81%aa%e5%ae%9f%e8%a3%85%e6%b3%95%e3%82%92%e6%84%9f","status":"publish","type":"post","link":"https:\/\/www.wingnest.com\/blog\/archives\/193","title":{"rendered":"OSGi \u30b5\u30fc\u30d3\u30b9\u3092\u30c6\u30b9\u30c8\u3059\u308b &#8211; Bundle\u306e\u521d\u6b69\u7684\u306a\u5b9f\u88c5\u6cd5\u3092\u611f\u899a\u7684\u306b\u7406\u89e3\u3059\u308b\u305f\u3081\u306b(2\/3)"},"content":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u306f\u3001\u300c<a href=\"http:\/\/www.wingnest.com\/blog\/archives\/150\">OSGi \u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3059\u308b Karaf \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u88c5\u3059\u308b \u2013 Bundle\u306e\u521d\u6b69\u7684\u306a\u5b9f\u88c5\u6cd5\u3092\u611f\u899a\u7684\u306b\u7406\u89e3\u3059\u308b\u305f\u3081\u306b(1\/3)<\/a>\u300d\u306e\u7d9a\u7de8\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u300c<a href=\"http:\/\/www.wingnest.com\/blog\/archives\/150\">OSGi \u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3059\u308b Karaf \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u88c5\u3059\u308b \u2013 Bundle \u306e\u521d\u6b69\u7684\u306a\u5b9f\u88c5\u6cd5\u3092\u611f\u899a\u7684\u306b\u7406\u89e3\u3059\u308b\u305f\u3081\u306b(1\/3)<\/a>\u300d\u3067\u4f5c\u6210\u3057\u305f\u3001\u30bd\u30fc\u30b9\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5143\u306b\u3001<a href=\"https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/Pax+Exam\">Pax Exam<\/a> \u3092\u4f7f\u3063\u3066 OSGi \u306e\u30b5\u30fc\u30d3\u30b9\u3092\u30c6\u30b9\u30c8\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<p><!--more--><\/p>\n<h3>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u5165\u308c\u305f Bundle \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b<\/h3>\n<p>\u89aa\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e0b\u306b\u3001\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u5165\u308c\u305f Bundle \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\u3002<br \/>\nArtifactId \u306f\u3001&#8221;com.wingnest.bundles.sample.hello.service_spec&#8221;\u3068\u3057\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306b\u793a\u3059 mvn \u30b3\u30de\u30f3\u30c9\u3092\u7aef\u672b\u304b\u3089\u5b9f\u884c\u3057\u3066\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre><code>$ pwd\n\/home\/gougi\/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/Karaf\/com.wingnest.bundles.sample.hello\n$ mvn archetype:generate \\\n    -DarchetypeGroupId=org.apache.karaf.archetypes \\\n    -DarchetypeArtifactId=karaf-bundle-archetype \\\n    -DarchetypeVersion=3.0.3 \\\n    -DgroupId=com.wingnest.bundles.sample.hello \\\n    -DartifactId=com.wingnest.bundles.sample.hello.service_spec \\\n    -Dversion=1.0-SNAPSHOT \\\n    -Dpackage=com.wingnest.bundles.sample.hello.service_spec\n[INFO] Scanning for projects...\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO] \n[INFO] com.wingnest.bundles.sample.hello\n[INFO] com.wingnest.bundles.sample.hello.service Bundle\n[INFO] Apache Karaf :: Shell mycommand\/hello Commands\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building com.wingnest.bundles.sample.hello 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO] \n[INFO] &gt;&gt;&gt; maven-archetype-plugin:2.2:generate (default-cli) @ com.wingnest.bundles.sample.hello &gt;&gt;&gt;\n[INFO] \n[INFO] &lt;&lt;&lt; maven-archetype-plugin:2.2:generate (default-cli) @ com.wingnest.bundles.sample.hello &lt;&lt;&lt;\n[INFO] \n[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ com.wingnest.bundles.sample.hello ---\n[INFO] Generating project in Interactive mode\n[INFO] Archetype repository missing. Using the one from [org.apache.karaf.archetypes:karaf-bundle-archetype:3.0.3] found in catalog remote\n[INFO] Using property: groupId = com.wingnest.bundles.sample.hello\n[INFO] Using property: artifactId = com.wingnest.bundles.sample.hello.service_spec\n[INFO] Using property: version = 1.0-SNAPSHOT\n[INFO] Using property: package = com.wingnest.bundles.sample.hello.service_spec\nConfirm properties configuration:\ngroupId: com.wingnest.bundles.sample.hello\nartifactId: com.wingnest.bundles.sample.hello.service_spec\nversion: 1.0-SNAPSHOT\npackage: com.wingnest.bundles.sample.hello.service_spec\n Y: : \n[INFO] ----------------------------------------------------------------------------\n[INFO] Using following parameters for creating project from Archetype: karaf-bundle-archetype:3.0.3\n[INFO] ----------------------------------------------------------------------------\n[INFO] Parameter: groupId, Value: com.wingnest.bundles.sample.hello\n[INFO] Parameter: artifactId, Value: com.wingnest.bundles.sample.hello.service_spec\n[INFO] Parameter: version, Value: 1.0-SNAPSHOT\n[INFO] Parameter: package, Value: com.wingnest.bundles.sample.hello.service_spaec\n[INFO] Parameter: packageInPathFormat, Value: com\/wingnest\/bundles\/sample\/hello\/service_spec\n[INFO] Parameter: version, Value: 1.0-SNAPSHOT\n[INFO] Parameter: package, Value: com.wingnest.bundles.sample.hello.service_spec\n[INFO] Parameter: groupId, Value: com.wingnest.bundles.sample.hello\n[INFO] Parameter: artifactId, Value: com.wingnest.bundles.sample.hello.service_spec\n[INFO] project created from Archetype in dir: \/home\/gougi\/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/Karaf\/com.wingnest.bundles.sample.hello\/com.wingnest.bundles.sample.hello.service_spec\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO] \n[INFO] com.wingnest.bundles.sample.hello ................. SUCCESS [5.884s]\n[INFO] com.wingnest.bundles.sample.hello.service Bundle .. SKIPPED\n[INFO] Apache Karaf :: Shell mycommand\/hello Commands .... SKIPPED\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 6.376s\n[INFO] Finished at: Mon Feb 09 14:41:30 JST 2015\n[INFO] Final Memory: 15M\/245M\n[INFO] ------------------------------------------------------------------------\n$ ls\ncom.wingnest.bundles.sample.hello.command\ncom.wingnest.bundles.sample.hello.service\ncom.wingnest.bundles.sample.hello.service_spec\npom.xml\n$ \n<\/code><\/pre>\n<p>\u65e2\u5b58\u306e\u30b5\u30fc\u30d3\u30b9\u7528 Bundle \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e2d\u306b\u3042\u308b src\/main\/java\/com\/wingnest\/bundles\/sample\/hello\/service\/Hello.java \u3092 \u4eca\u4f5c\u6210\u3057\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u7528\u306e Bundle \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e src\/main\/java\/com\/wingnest\/bundles\/sample\/hello\/service_spec \u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<\/p>\n<pre><code>$ cd com.wingnest.bundles.sample.hello.service_spec\n$ mv ..\/com.wingnest.bundles.sample.hello.service\/src\/main\/java\/com\/wingnest\/bundles\/sample\/hello\/service\/Hello.java \\\n     src\/main\/java\/com\/wingnest\/bundles\/sample\/hello\/service_spec\/Hello.java\n$\n<\/code><\/pre>\n<p>\u7570\u306a\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u79fb\u52d5\u3057\u305f\u306e\u3067\u3001package \u5ba3\u8a00\u306e\u5024\u3092\u30a8\u30c7\u30a3\u30bf\u3067\u4fee\u6b63\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<pre><code>src\/main\/java\/com\/wingnest\/bundles\/sample\/hello\/service_spec\/Hello.java:\n---\npackage com.wingnest.bundles.sample.hello.service_spec;\n\npublic interface Hello {\n\n    String hello();\n\n}\n<\/code><\/pre>\n<p>\u3067\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u5165\u308c\u305f Bundle \u3092 Maven \u306e\u30ed\u30fc\u30ab\u30eb\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u3055\u3089\u306b Karaf \u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u306f\u3001mvn install \u3092\u5b9f\u884c\u3057\u3066\u3001Maven \u306e\u30ed\u30fc\u30ab\u30eb\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b5\u30fc\u30d3\u30b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u5165\u308c\u305f Bundle \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n<pre><code>$ pwd\n\/home\/gougi\/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/Karaf\/com.wingnest.bundles.sample.hello\/com.wingnest.bundles.sample.hello.service_spec\n$ mvn install\n[INFO] Scanning for projects...\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building com.wingnest.bundles.sample.hello.service_spec Bundle 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n(\u7701\u7565)\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 1.194s\n[INFO] Finished at: Mon Feb 09 15:09:55 JST 2015\n[INFO] Final Memory: 15M\/355M\n[INFO] ------------------------------------------------------------------------\n$\n<\/code><\/pre>\n<p>\u7121\u4e8b\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u3067\u306f\u3001\u6b21\u306b\u3001Karaf \u30b3\u30f3\u30bd\u30fc\u30eb\u304b\u3089 Karaf \u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre><code>karaf@root()&gt; install -s mvn:com.wingnest.bundles.sample.hello\/com.wingnest.bundles.sample.hello.service_spec\/1.0-SNAPSHOT\nBundle ID: 66\nkaraf@root()&gt; list\nSTART LEVEL 100 , List Threshold: 50\nID | State  | Lvl | Version        | Name                                                 \n------------------------------------------------------------------------------------------\n64 | Active |  80 | 1.0.0.SNAPSHOT | com.wingnest.bundles.sample.hello.service Bundle     \n65 | Active |  80 | 1.0.0.SNAPSHOT | Apache Karaf :: Shell mycommand\/hello Commands       \n66 | Active |  80 | 1.0.0.SNAPSHOT | com.wingnest.bundles.sample.hello.service_spec Bundle\nkaraf@root()&gt; \n<\/code><\/pre>\n<p>\u3046\u307e\u304f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u3067\u306f\u3001\u30b3\u30de\u30f3\u30c9\u3068\u30b5\u30fc\u30d3\u30b9\u306e\u4e21\u65b9\u3092\u3053\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u5165\u308c\u305f Bundle \u3092\u5229\u7528\u3059\u308b\u3088\u3046\u306b\u4fee\u6b63\u3057\u3001\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u66f4\u65b0\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u3001\u30b5\u30fc\u30d3\u30b9\u306e pom.xml \u306e dependencies \u8981\u7d20\u306e\u4e0b\u306b\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u5165\u308c\u305f Bundle \u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u3001\u305d\u306e dependency \u8981\u7d20\u3092\u8ffd\u8a18\u3057\u307e\u3059\u3002<\/p>\n<pre><code>(\u7701\u7565)\n    &lt;dependencies&gt;    \n        &lt;dependency&gt;\n            &lt;groupId&gt;com.wingnest.bundles.sample.hello&lt;\/groupId&gt;\n            &lt;artifactId&gt;com.wingnest.bundles.sample.hello.service_spec&lt;\/artifactId&gt;\n            &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;\/dependency&gt;\n(\u7701\u7565)\n<\/code><\/pre>\n<p>\u6b21\u306b\u3001\u30b3\u30de\u30f3\u30c9\u7528 Bundle \u306e pom.xml \u306e dependencies \u8981\u7d20\u306e\u4e0b\u306b\u3042\u308b\u3001\u6b21\u306e\u8a18\u8ff0\u3092\u66f8\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u8a18\u8ff0\u3092\uff1a<\/p>\n<pre><code>(\u7701\u7565)\n    &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.wingnest.bundles.sample.hello&lt;\/groupId&gt;\n            &lt;artifactId&gt;com.wingnest.bundles.sample.hello.service&lt;\/artifactId&gt;\n            &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;\/dependency&gt;\n(\u7701\u7565)\n<\/code><\/pre>\n<p>(\u30b5\u30fc\u30d3\u30b9\u306e pom.xml \u3068\u540c\u69d8\u306b)\u6b21\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff1a<\/p>\n<pre><code>(\u7701\u7565)\n    &lt;dependencies&gt;    \n        &lt;dependency&gt;\n            &lt;groupId&gt;com.wingnest.bundles.sample.hello&lt;\/groupId&gt;\n            &lt;artifactId&gt;com.wingnest.bundles.sample.hello.service_spec&lt;\/artifactId&gt;\n            &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;\/dependency&gt;\n(\u7701\u7565)\n<\/code><\/pre>\n<p>\u3067\u306f\u3001\u89aa\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e2d\u3067\u3001 mvn install \u3092\u5b9f\u884c\u3057\u3001\u5b50\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u751f\u6210\u3059\u308b\u3059\u3079\u3066\u306e Bundle \u3092 Maven\u306e\u30ed\u30fc\u30ab\u30eb\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u4e00\u5ea6\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre><code>$ pwd\n\/home\/gougi\/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/Karaf\/com.wingnest.bundles.sample.hello\n$ mvn install\n[INFO] Scanning for projects...\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO] \n[INFO] com.wingnest.bundles.sample.hello\n[INFO] com.wingnest.bundles.sample.hello.service_spec Bundle\n[INFO] com.wingnest.bundles.sample.hello.service Bundle\n[INFO] Apache Karaf :: Shell mycommand\/hello Commands\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building com.wingnest.bundles.sample.hello 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO] \n[INFO] --- maven-install-plugin:2.3:install (default-install) @ com.wingnest.bundles.sample.hello ---\n[INFO] Installing \/home\/gougi\/\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\/Karaf\/com.wingnest.bundles.sample.hello\/pom.xml to \/home\/gougi\/.m2\/repository\/com\/wingnest\/bundles\/com.wingnest.bundles.sample.hello\/1.0-SNAPSHOT\/com.wingnest.bundles.sample.hello-1.0-SNAPSHOT.pom\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building com.wingnest.bundles.sample.hello.service_spec Bundle 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n\uff08\u7701\u7565\uff09\n[INFO] ------------------------------------------------------------------------\n[INFO] Building com.wingnest.bundles.sample.hello.service Bundle 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n\uff08\u7701\u7565\uff09 \n[INFO] ------------------------------------------------------------------------\n[INFO] Building Apache Karaf :: Shell mycommand\/hello Commands 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n\uff08\u7701\u7565\uff09 \n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO] \n[INFO] com.wingnest.bundles.sample.hello ................. SUCCESS [0.079s]\n[INFO] com.wingnest.bundles.sample.hello.service_spec Bundle  SUCCESS [0.801s]\n[INFO] com.wingnest.bundles.sample.hello.service Bundle .. SUCCESS [0.508s]\n[INFO] Apache Karaf :: Shell mycommand\/hello Commands .... SUCCESS [0.290s]\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 2.048s\n[INFO] Finished at: Mon Feb 09 16:41:33 JST 2015\n[INFO] Final Memory: 23M\/324M\n[INFO] ------------------------------------------------------------------------\n$ \n<\/code><\/pre>\n<p>\u7121\u4e8b\u306b\u3001\u3059\u3079\u3066\u306e Bundle \u3092 Maven \u306e\u30ed\u30fc\u30ab\u30eb\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u3067\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30de\u30f3\u30c9\u7528\u306e Bundle \u3092 Karaf \u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u3087\u3046\u3002\u5b9f\u969b\u306f\u3001\u3059\u3067\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001install \u30b3\u30de\u30f3\u30c9\u3067\u306f\u306a\u304f\u3001update \u30b3\u30de\u30f3\u30c9\u3067\u884c\u3044\u307e\u3059\u3002<\/p>\n<pre><code>karaf@root()&gt; list\nSTART LEVEL 100 , List Threshold: 50\nID | State  | Lvl | Version        | Name                                                 \n------------------------------------------------------------------------------------------\n64 | Active |  80 | 1.0.0.SNAPSHOT | com.wingnest.bundles.sample.hello.service Bundle     \n65 | Active |  80 | 1.0.0.SNAPSHOT | Apache Karaf :: Shell mycommand\/hello Commands       \n66 | Active |  80 | 1.0.0.SNAPSHOT | com.wingnest.bundles.sample.hello.service_spec Bundle\nkaraf@root()&gt; update 64\nStopping the bundle!!!\nStarting the bundle!!!\nkaraf@root()&gt; update 65\nkaraf@root()&gt; \n&lt;\/code&gt;&lt;\/pre&gt;\n\nmycommand:hello \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002\n\n&lt;pre&gt;&lt;code&gt;karaf@root()&gt; mycommand:hello \nhello\nkaraf@root()&gt; \n<\/code><\/pre>\n<p>\u3061\u3083\u3093\u3068\u3001&#8221;hello&#8221; \u3068\u51fa\u529b\u3055\u308c\u305f\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<h3>PAX Exam4 \u3092\u4f7f\u3063\u3066\u30b5\u30fc\u30d3\u30b9\u306e\u30c6\u30b9\u30c8\u3092\u66f8\u304f<\/h3>\n<p><a href=\"https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/Pax+Exam\">Pax Exam<\/a> \u306f\u3001\u4efb\u610f\u306e Bundle \u306b\u5bfe\u3059\u308b\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u8a18\u8ff0\u53ef\u80fd\u306b\u3059\u308b\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002<br \/>\n\u3053\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001Bundle \u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092 <a href=\"http:\/\/felix.apache.org\/\">Apache Felix<\/a> \u3084 <a href=\"http:\/\/eclipse.org\/equinox\/\">Eclipse Equinox<\/a>\u306a\u3069\u306e OSGi \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u3046 <a href=\"https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/OSGi+Containers\">OSGi \u30c6\u30b9\u30c8\u30b3\u30f3\u30c6\u30ca<\/a>\u3001\u307e\u305f\u306f\u3001 Karaf \u3092\u4f7f\u3046<a href=\"https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/Karaf+Container\">Karaf \u30c6\u30b9\u30c8\u30b3\u30f3\u30c6\u30ca<\/a>\u306e\u4e0a\u306a\u3069<sup><a href=\"#footnote_1_193\" id=\"identifier_1_193\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/Test+Containers\">1<\/a><\/sup>\u3067\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u4eca\u56de\u4f5c\u6210\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u306e\u30c6\u30b9\u30c8\u306f\u3001OSGi \u30c6\u30b9\u30c8\u30b3\u30f3\u30c6\u30ca\u3068 Karaf \u30c6\u30b9\u30c8\u30b3\u30f3\u30c6\u30ca\u306e\u3069\u3061\u3089\u3067\u3082\u8a18\u8ff0\u3067\u304d\u307e\u3059\u304c\u3001\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001OSGi \u30c6\u30b9\u30c8\u30b3\u30f3\u30c6\u30ca\u306e\u4e0a\u306b\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002OSGi \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u306f\u3001Apache Felix \u3092\u5229\u7528\u3057\u307e\u3059\u3002<\/p>\n<h4>Pax Exam4 \u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a Maven Dependency<\/h4>\n<p>Pax Exam \u3092\u5229\u7528\u3059\u308b\u306e\u306b\u5fc5\u8981\u306a Maven Dependency \u306f\u3001<a href=\"https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/OSGi+Containers\">OSGi Containers<\/a>\u3068\u3044\u3046\u8a18\u4e8b\u306b\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u3002\u2026\u3068\u8a00\u3044\u305f\u3044\u3068\u3053\u308d\u3067\u3059\u304c\u3001\u305d\u3053\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u5185\u5bb9\u306f\u3001Pax Exam3 \u7528\u306e\u307e\u307e\u306b\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002<br \/>\n\u305d\u306e\u305f\u3081\u3001\u3053\u308c\u3092\u53c2\u8003\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30b5\u30fc\u30d3\u30b9\u306e pom.xml \u3092\u4fee\u6b63\u3057\u307e\u3057\u305f\u3002<\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n    xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"&gt;\n\n    &lt;!-- Licensed to the Apache Software Foundation (ASF) under one or more \n        contributor license agreements. See the NOTICE file distributed with this \n        work for additional information regarding copyright ownership. The ASF licenses \n        this file to you under the Apache License, Version 2.0 (the \"License\"); you \n        may not use this file except in compliance with the License. You may obtain \n        a copy of the License at http:\/\/www.apache.org\/licenses\/LICENSE-2.0 Unless \n        required by applicable law or agreed to in writing, software distributed \n        under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES \n        OR CONDITIONS OF ANY KIND, either express or implied. See the License for \n        the specific language governing permissions and limitations under the License. --&gt;\n\n    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\n    &lt;parent&gt;\n        &lt;artifactId&gt;com.wingnest.bundles.sample.hello&lt;\/artifactId&gt;\n        &lt;groupId&gt;com.wingnest.bundles&lt;\/groupId&gt;\n        &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n    &lt;\/parent&gt;\n\n    &lt;groupId&gt;com.wingnest.bundles.sample.hello&lt;\/groupId&gt;\n    &lt;artifactId&gt;com.wingnest.bundles.sample.hello.service&lt;\/artifactId&gt;\n    &lt;packaging&gt;bundle&lt;\/packaging&gt;\n\n    &lt;name&gt;com.wingnest.bundles.sample.hello.service Bundle&lt;\/name&gt;\n    &lt;description&gt;com.wingnest.bundles.sample.hello.service OSGi bundle project.&lt;\/description&gt;\n\n    &lt;properties&gt;\n        &lt;maven-bundle-plugin.version&gt;2.5.3&lt;\/maven-bundle-plugin.version&gt;\n        &lt;osgi.version&gt;5.0.0&lt;\/osgi.version&gt;\n        &lt;!-- for testing --&gt;\n        &lt;pax-exam.version&gt;4.4.0&lt;\/pax-exam.version&gt;\n        &lt;pax-url.version&gt;2.3.0&lt;\/pax-url.version&gt;\n        &lt;felix.version&gt;4.6.0&lt;\/felix.version&gt;\n        &lt;junit.version&gt;4.11&lt;\/junit.version&gt;\n    &lt;\/properties&gt;\n\n    &lt;dependencies&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.slf4j&lt;\/groupId&gt;\n            &lt;artifactId&gt;slf4j-api&lt;\/artifactId&gt;\n            &lt;version&gt;1.7.10&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;ch.qos.logback&lt;\/groupId&gt;\n            &lt;artifactId&gt;logback-classic&lt;\/artifactId&gt;\n            &lt;version&gt;1.0.9&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;commons-logging&lt;\/groupId&gt;\n            &lt;artifactId&gt;commons-logging&lt;\/artifactId&gt;\n            &lt;version&gt;1.2&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.ops4j.pax.exam&lt;\/groupId&gt;\n            &lt;artifactId&gt;pax-exam&lt;\/artifactId&gt;\n            &lt;version&gt;${pax-exam.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.ops4j.pax.exam&lt;\/groupId&gt;\n            &lt;artifactId&gt;pax-exam-spi&lt;\/artifactId&gt;\n            &lt;version&gt;${pax-exam.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.ops4j.pax.exam&lt;\/groupId&gt;\n            &lt;artifactId&gt;pax-exam-container-native&lt;\/artifactId&gt;\n            &lt;version&gt;${pax-exam.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.ops4j.pax.exam&lt;\/groupId&gt;\n            &lt;artifactId&gt;pax-exam-junit4&lt;\/artifactId&gt;\n            &lt;version&gt;${pax-exam.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.ops4j.pax.exam&lt;\/groupId&gt;\n            &lt;artifactId&gt;pax-exam-link-mvn&lt;\/artifactId&gt;\n            &lt;version&gt;${pax-exam.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.ops4j.pax.url&lt;\/groupId&gt;\n            &lt;artifactId&gt;pax-url-aether&lt;\/artifactId&gt;\n            &lt;version&gt;${pax-url.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.apache.felix&lt;\/groupId&gt;\n            &lt;artifactId&gt;org.apache.felix.framework&lt;\/artifactId&gt;\n            &lt;version&gt;${felix.version}&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;javax.inject&lt;\/groupId&gt;\n            &lt;artifactId&gt;javax.inject&lt;\/artifactId&gt;\n            &lt;version&gt;1&lt;\/version&gt;\n            &lt;scope&gt;test&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;com.wingnest.bundles.sample.hello&lt;\/groupId&gt;\n            &lt;artifactId&gt;com.wingnest.bundles.sample.hello.service_spec&lt;\/artifactId&gt;\n            &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.osgi&lt;\/groupId&gt;\n            &lt;artifactId&gt;org.osgi.core&lt;\/artifactId&gt;\n            &lt;version&gt;${osgi.version}&lt;\/version&gt;\n            &lt;scope&gt;provided&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.osgi&lt;\/groupId&gt;\n            &lt;artifactId&gt;org.osgi.compendium&lt;\/artifactId&gt;\n            &lt;version&gt;${osgi.version}&lt;\/version&gt;\n            &lt;scope&gt;provided&lt;\/scope&gt;\n        &lt;\/dependency&gt;\n\n    &lt;\/dependencies&gt;\n\n    &lt;build&gt;\n        &lt;plugins&gt;\n\n            &lt;plugin&gt;\n                &lt;groupId&gt;org.apache.felix&lt;\/groupId&gt;\n                &lt;artifactId&gt;maven-bundle-plugin&lt;\/artifactId&gt;\n                &lt;version&gt;${maven-bundle-plugin.version}&lt;\/version&gt;\n                &lt;extensions&gt;true&lt;\/extensions&gt;\n                &lt;configuration&gt;\n                    &lt;instructions&gt;\n                        &lt;Bundle-SymbolicName&gt;${project.artifactId}&lt;\/Bundle-SymbolicName&gt;\n                        &lt;Bundle-Version&gt;${project.version}&lt;\/Bundle-Version&gt;\n                        &lt;Bundle-Activator&gt;com.wingnest.bundles.sample.hello.service.Activator&lt;\/Bundle-Activator&gt;\n                        &lt;Export-Package&gt;com.wingnest.bundles.sample.hello.service*;version=${project.version}&lt;\/Export-Package&gt;\n                        &lt;Import-Package&gt;*&lt;\/Import-Package&gt;\n                    &lt;\/instructions&gt;\n                &lt;\/configuration&gt;\n            &lt;\/plugin&gt;\n\n            &lt;!-- Needed if you use versionAsInProject() --&gt;\n            &lt;plugin&gt;\n                &lt;groupId&gt;org.apache.servicemix.tooling&lt;\/groupId&gt;\n                &lt;artifactId&gt;depends-maven-plugin&lt;\/artifactId&gt;\n                &lt;version&gt;1.2&lt;\/version&gt;\n                &lt;executions&gt;\n                    &lt;execution&gt;\n                        &lt;id&gt;generate-depends-file&lt;\/id&gt;\n                        &lt;goals&gt;\n                            &lt;goal&gt;generate-depends-file&lt;\/goal&gt;\n                        &lt;\/goals&gt;\n                    &lt;\/execution&gt;\n                &lt;\/executions&gt;\n            &lt;\/plugin&gt;\n\n        &lt;\/plugins&gt;\n    &lt;\/build&gt;\n\n&lt;\/project&gt;\n<\/code><\/pre>\n<p>\u6b21\u306b\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u66f8\u304d\u307e\u3059\u3002<\/p>\n<p>\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306f\u3001\u4ee5\u4e0b\u306e\u5185\u5bb9\u306b\u3057\u307e\u3059\uff1a<\/p>\n<ul>\n<li>BundleContex \u3068 Hello \u30b5\u30fc\u30d3\u30b9 \u306f\u3001\u30c6\u30b9\u30c8\u5b9f\u884c\u524d\u306b\u3001 @Inject\u3000\u306b\u3088\u308a\u3001\u30a4\u30f3\u30b8\u30a7\u30af\u30c8\u3057\u3066\u3082\u3089\u3046<\/li>\n<li>\u30c6\u30b9\u30c8\u306e\u4e2d\u3067\u306f\u3001BundleContex \u3068 Hello \u30b5\u30fc\u30d3\u30b9\u304c\u3001\u30a4\u30f3\u30b8\u30a7\u30af\u30c8\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3059\u308b<\/li>\n<li>Hello \u30b5\u30fc\u30d3\u30b9\u306e #hello() \u30e1\u30bd\u30c3\u30c9\u3092\u547c\u3073\u51fa\u3057\u6587\u5b57\u5217 &#8220;hello&#8221; \u304c\u53d6\u5f97\u3067\u304d\u308b\u304b\u78ba\u8a8d\u3059\u308b\u3002<\/li>\n<\/ul>\n<p>\u3067\u306f\u3001\u6b21\u306e\u30af\u30e9\u30b9\u3092 src\/test\/java \u306e\u4e0b\u306b\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><code>\/src\/test\/java\/com\/wingnest\/bundles\/sample\/hello\/service\/TestOsgiServices.java\n---\npackage com.wingnest.bundles.sample.hello.service;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertNotNull;\nimport static org.ops4j.pax.exam.CoreOptions.junitBundles;\nimport static org.ops4j.pax.exam.CoreOptions.mavenBundle;\nimport static org.ops4j.pax.exam.CoreOptions.streamBundle;\nimport static org.ops4j.pax.tinybundles.core.TinyBundles.bundle;\n\nimport javax.inject.Inject;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.ops4j.pax.exam.Configuration;\nimport org.ops4j.pax.exam.Option;\nimport org.ops4j.pax.exam.junit.PaxExam;\nimport org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;\nimport org.ops4j.pax.exam.spi.reactors.PerClass;\nimport org.osgi.framework.BundleContext;\nimport org.osgi.framework.Constants;\n\nimport com.wingnest.bundles.sample.hello.service_spec.Hello;\n\n@ExamReactorStrategy(PerClass.class)\n@RunWith(PaxExam.class)\npublic class TestOsgiServices {\n\n  @Inject\n  protected BundleContext bundleContext;\n\n  @Inject\n  protected Hello hello;\n\n  @Inject\n  protected Hello hello;\n\n    @Configuration\n    public Option[] config() {\n        return new Option[] {\n\n                mavenBundle()\n                        .groupId(\"com.wingnest.bundles.sample.hello\")\n                        .artifactId(\n                                \"com.wingnest.bundles.sample.hello.service_spec\")\n                        .versionAsInProject(),\n\n                streamBundle(bundle()\n                        .set(Constants.BUNDLE_SYMBOLICNAME, \"com.wingnest.bundles.sample.hello.service\")    \/\/ \u3053\u306e\u8a2d\u5b9a\u306f\u5fc5\u9808\u3067\u306f\u306a\u3044\n                        .add(com.wingnest.bundles.sample.hello.service.Activator.HelloImpl.class) \/\/ <sup><a href=\"#footnote_2_193\" id=\"identifier_2_193\" class=\"footnote-link footnote-identifier-link\" title=\"\u79c1\u306eWindows\u74b0\u5883\u3067\u306f\u3001\u4e0b\u306eadd()\u3068\u9806\u756a\u3092\u5165\u308c\u66ff\u3048\u308b\u3068Activator\u30af\u30e9\u30b9\u304c\u898b\u3064\u3051\u3089\u308c\u306a\u3044\u3068\u3044\u3046\u4f8b\u5916\u306b\u306a\u3063\u305f\u3002\u6469\u8a36\u4e0d\u601d\u8b70\u3002\">2<\/a><\/sup>\n                        .add(com.wingnest.bundles.sample.hello.service.Activator.class)\n                        .set(Constants.BUNDLE_ACTIVATOR, com.wingnest.bundles.sample.hello.service.Activator.class.getName())\n                        .set(Constants.IMPORT_PACKAGE, \"org.osgi.framework, com.wingnest.bundles.sample.hello.service_spec\")\n                        .build()),\n\n                junitBundles()\n\n        };\n    }\n\n  @Test\n  public void test() throws InterruptedException {\n    assertNotNull(bundleContext);\n    assertNotNull(hello);\n    assertEquals(\"hello\", hello.hello());\n  }\n\n}\n<\/code><\/pre>\n<p>@Configuration\u3067\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3057\u305f config()\u30e1\u30bd\u30c3\u30c9\u3067\u306f\u3001Felix \u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306e\u69cb\u6210\u60c5\u5831\u3092\u8a18\u8ff0\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\nHello \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3060\u3051\u3092\u6301\u3063\u305f Bundle \u3092\u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089\u53d6\u5f97\u3057\u3066\u5229\u7528\u3059\u308b\u3053\u3068\u3001\u305d\u3057\u3066 Hello\u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u88c5\u3092\u8a18\u8ff0\u3057\u305f\u30b5\u30fc\u30d3\u30b9 Bundle \u3092\u30c6\u30b9\u30c8\u306e\u305f\u3081\u306b\u52d5\u7684\u306b\u751f\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u3053\u3068\u3092\u8a18\u8ff0\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u5f8c\u8005\u306e streamBundle() \u306e\u4e2d\u3067\u884c\u3063\u3066\u3044\u308b\u8a2d\u5b9a\u306f\u3001pom.xml \u3067\u306e maven-bundle-plugin\u3000\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8a2d\u5b9a\u65b9\u6cd5\u3068\u307b\u307c\u540c\u3058\u3067\u3059\u3002<\/p>\n<h3>\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u308b<\/h3>\n<p>\u3067\u306f\u3001\u8a18\u8ff0\u3057\u305f\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre><code>$ mvn test\n[INFO] Scanning for projects...\n[INFO] \n[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building com.wingnest.bundles.sample.hello.service Bundle 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n(\u7701\u7565)\n10:45:27.966 [main] INFO  o.o.p.e.spi.reactors.ReactorManager - suite finished\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.542 sec - in com.wingnest.bundles.sample.hello.service.TestOsgiServices\n\nResults :\n\nTests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 2.201 s\n[INFO] Finished at: 2015-02-15T10:45:27+09:00\n[INFO] Final Memory: 18M\/257M\n[INFO] ------------------------------------------------------------------------\n<\/code><\/pre>\n<p>\u30b9\u30eb\u30c3\u3068\u901a\u3063\u305f\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<ul>\n<li>\u3053\u306e\u8a18\u4e8b\u3067\u4f5c\u6210\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff1a<br \/>\n<a href=\"https:\/\/github.com\/sgougi\/OSGiSample-HelloProject\/tree\/phase2\">https:\/\/github.com\/sgougi\/OSGiSample-HelloProject\/tree\/phase2<\/a><\/li>\n<\/ul>\n<h3>\u3042\u3068\u304c\u304d<\/h3>\n<p>Pax Exam \u3092\u4f7f\u3063\u3066\u3044\u3066\u60a9\u307e\u3057\u3044\u304f\u611f\u3058\u3066\u3044\u308b\u306e\u304c\u3001\u8a2d\u5b9a\u304c\u3046\u307e\u304f\u3067\u304d\u3066\u3044\u306a\u3044\u6642\u306b\u51fa\u308b\u30a8\u30e9\u30fc\u3084\u4f8b\u5916\u3067\u306f\u3001\u305d\u308c\u3092\u53d7\u3051\u3066\u3069\u306e\u3088\u3046\u306b\u5bfe\u51e6\u3059\u308c\u3070\u826f\u3044\u304b\u304c\u3001\u307e\u3063\u305f\u304f\u60f3\u50cf\u304c\u3067\u304d\u306a\u3044\u30b1\u30fc\u30b9\u304c\u591a\u3044\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002\u7c21\u5358\u306b\u306f\u57cb\u3081\u308b\u3053\u3068\u304c\u96e3\u3057\u3044\u30ae\u30e3\u30c3\u30d7\u304c\u3042\u308b\u3067\u3057\u3087\u3046\u306d\u3002<\/p>\n<p>\u5f8c\u3001Karaf \u30b3\u30de\u30f3\u30c9\u306e\u30c6\u30b9\u30c8\u65b9\u6cd5\u306b\u3064\u3044\u3066\u66f8\u304d\u305f\u3044\u3068\u601d\u3063\u3066\u3044\u307e\u3059\u3002\u3057\u304b\u3057\u3001Pax Exam \u306b\u305d\u306e\u30c6\u30b9\u30c8\u306b\u95a2\u308f\u308b<a href=\"https:\/\/issues.apache.org\/jira\/browse\/KARAF-3489\">\u4e0d\u5177\u5408<\/a>\u304c\u3042\u308b\u3053\u3068\u304c\u308f\u304b\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u305d\u308c\u304c\u89e3\u6c7a\u3055\u308c\u3066\u304b\u3089\u306b\u3057\u3088\u3046\u304b\u3069\u3046\u3057\u3088\u3046\u304b\u3068\u3001\u8ff7\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u3067\u306f\u3001\u3053\u306e\u8a18\u4e8b\u306f\u3053\u306e\u8fba\u3067\u3002<\/p>\n<ol class=\"footnotes\"><li id=\"footnote_1_193\" class=\"footnote\">https:\/\/ops4j1.jira.com\/wiki\/display\/PAXEXAM4\/Test+Containers<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_193\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_2_193\" class=\"footnote\">\u79c1\u306eWindows\u74b0\u5883\u3067\u306f\u3001\u4e0b\u306eadd()\u3068\u9806\u756a\u3092\u5165\u308c\u66ff\u3048\u308b\u3068Activator\u30af\u30e9\u30b9\u304c\u898b\u3064\u3051\u3089\u308c\u306a\u3044\u3068\u3044\u3046\u4f8b\u5916\u306b\u306a\u3063\u305f\u3002\u6469\u8a36\u4e0d\u601d\u8b70\u3002<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_2_193\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>\u3053\u306e\u8a18\u4e8b\u306f\u3001\u300cOSGi \u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3059\u308b Karaf \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u88c5\u3059\u308b \u2013 &hellip;  <\/p>\n<p class=\"more-link\"><a href=\"https:\/\/www.wingnest.com\/blog\/archives\/193\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6],"tags":[15,9],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-java","category-osgi","tag-apache-felix","tag-apache-karaf"],"_links":{"self":[{"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/comments?post=193"}],"version-history":[{"count":13,"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/posts\/193\/revisions"}],"predecessor-version":[{"id":299,"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/posts\/193\/revisions\/299"}],"wp:attachment":[{"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/media?parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/categories?post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wingnest.com\/blog\/wp-json\/wp\/v2\/tags?post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}