如何启动OSGI-INF蓝图

时间:2017-10-19 09:25:38

标签: java maven blueprint-osgi

我是OSGI-INF蓝图的初学者。 我有两个名为Account and Currency的类。我现在尝试通过在IntelliJ中按“运行帐户SHIFT + F10”来启动我的程序。然后我就回来了:

  

Hello Account!

但我想让它写出Currency方法toString()。

帐户:

package com.domain.subdomain;

public class Currency {
    String country;
    String isoCode;
    String unit;
    String name;

    double transferPurchase;
    double transferSell;
    double transferChange;
    double transferLast;
    double transferDelta;

    double notePurchase;
    double noteSell;

    public Currency(){

    }

    public Currency(String country, String isoCode, String unit, String name, double transferPurchase, double transferSell, double transferChange, double transferLast, double transferDelta, double notePurchase, double noteSell) {
        this.country = country;
        this.isoCode = isoCode;
        this.unit = unit;
        this.name = name;
        this.transferPurchase = transferPurchase;
        this.transferSell = transferSell;
        this.transferChange = transferChange;
        this.transferLast = transferLast;
        this.transferDelta = transferDelta;
        this.notePurchase = notePurchase;
        this.noteSell = noteSell;
    }

    public static void main(String[] args) {
        System.out.println("Hello Currency!");
    }




    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getIsoCode() {
        return isoCode;
    }

    public void setIsoCode(String isoCode) {
        this.isoCode = isoCode;
    }

    public String getUnit() {
        return unit;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getTransferPurchase() {
        return transferPurchase;
    }

    public void setTransferPurchase(double transferPurchase) {
        this.transferPurchase = transferPurchase;
    }

    public double getTransferSell() {
        return transferSell;
    }

    public void setTransferSell(double transferSell) {
        this.transferSell = transferSell;
    }

    public double getTransferChange() {
        return transferChange;
    }

    public void setTransferChange(double transferChange) {
        this.transferChange = transferChange;
    }

    public double getTransferLast() {
        return transferLast;
    }

    public void setTransferLast(double transferLast) {
        this.transferLast = transferLast;
    }

    public double getTransferDelta() {
        return transferDelta;
    }

    public void setTransferDelta(double transferDelta) {
        this.transferDelta = transferDelta;
    }

    public double getNotePurchase() {
        return notePurchase;
    }

    public void setNotePurchase(double notePurchase) {
        this.notePurchase = notePurchase;
    }

    public double getNoteSell() {
        return noteSell;
    }

    public void setNoteSell(double noteSell) {
        this.noteSell = noteSell;
    }

    @Override
    public String toString() {
        return "Currency{" +
                "country='" + country + '\'' +
                ", isoCode='" + isoCode + '\'' +
                ", unit='" + unit + '\'' +
                ", name='" + name + '\'' +
                ", transferPurchase=" + transferPurchase +
                ", transferSell=" + transferSell +
                ", transferChange=" + transferChange +
                ", transferLast=" + transferLast +
                ", transferDelta=" + transferDelta +
                ", notePurchase=" + notePurchase +
                ", noteSell=" + noteSell +
                '}';
    }
}

货币:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <bean id="accountOne" class="com.domain.subdomain.Account" init-method="startUp">
        <property name="currency" ref="currencyUS" />
    </bean>

    <bean id="accountTwo" class="com.domain.subdomain.Account" init-method="startUp">
        <property name="currency" ref="currencyEU" />
    </bean>


    <bean id="currencyUS" class="com.domain.subdomain.Currency">
        <argument value="USA"/> <!-- country -->
        <argument value="US"/> <!-- isoCode -->
        <argument value="1"/> <!-- unit -->
        <argument value="Dollar"/> <!-- name -->
        <argument value="7.91"/> <!-- transferPurchase -->
        <argument value="7.82"/> <!-- transferSell -->
        <argument value="0.83"/> <!-- transferChange -->
        <argument value="7.94"/> <!-- transferLast -->
        <argument value="7.95"/> <!-- transferDelta -->
        <argument value="7.59"/> <!-- notePurchase -->
        <argument value="8.31"/> <!-- noteSell -->
    </bean>

    <bean id="currencyEU" class="com.domain.subdomain.Currency">
        <argument value="European Union"/> <!-- country -->
        <argument value="EU"/> <!-- isoCode -->
        <argument value="1"/> <!-- unit -->
        <argument value="Euro"/> <!-- name -->
        <argument value="9.36"/> <!-- transferPurchase -->
        <argument value="9.43"/> <!-- transferSell -->
        <argument value="6.14"/> <!-- transferChange -->
        <argument value="9.33"/> <!-- transferLast -->
        <argument value="9.39"/> <!-- transferDelta -->
        <argument value="8.90"/> <!-- notePurchase -->
        <argument value="9.89"/> <!-- noteSell -->
    </bean>


</blueprint>

OSGI-INF.blueprint.currency-ctx.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.domain.subdomain</groupId>
    <artifactId>blueprint-bank-account-example</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <!-- Annotations -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>javax.enterprise</groupId>
            <artifactId>cdi-api</artifactId>
            <version>1.2</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>javax.transaction-api</artifactId>
            <version>1.2</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.aries.blueprint</groupId>
            <artifactId>blueprint-maven-plugin-annotation</artifactId>
            <version>1.3.0</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.ops4j.pax.cdi</groupId>
            <artifactId>pax-cdi-api</artifactId>
            <version>0.8.0</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.servicemix.bundles</groupId>
            <artifactId>org.apache.servicemix.bundles.spring-beans</artifactId>
            <version>3.2.11.RELEASE_1</version>
            <optional>true</optional>
        </dependency>
        <!-- //Annotations -->

        <!-- SPI -->
        <dependency>
            <groupId>org.apache.aries.blueprint</groupId>
            <artifactId>blueprint-maven-plugin-spi</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!-- //SPI -->


    </dependencies>


    <build>
        <plugins>
            <!-- BluePrint -->
            <plugin>
                <groupId>org.apache.aries.blueprint</groupId>
                <artifactId>blueprint-maven-plugin</artifactId>
                <version>1.9.0</version>
                <configuration>
                    <scanPaths>
                        <scanPath>com.domain.subdomain</scanPath>
                    </scanPaths>
                </configuration>
            </plugin>
            <!-- //BluePrint -->


        </plugins>
    </build>

</project>

的pom.xml:

let printController = UIPrintInteractionController.shared

1 个答案:

答案 0 :(得分:2)

OSGi包是一种插件,您可以在 OSGi容器(JBoss Fuse,Apache Karaf,Eclipse Equinox,...)中运行。因此,您不需要 main方法。

使用maven构建OSGi包时,请指定<packaging>bundle</packaging>并添加

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <version>3.3.0</version>
</plugin>

因为bundle jar有一些额外的头文件(由这个插件添加)告诉OSGi容器加载蓝图文件。

您可以将Blueprint想象成与Spring非常相似的东西:您在XML文件中声明bean和依赖项。在你的情况下,你刚刚声明了将被实例化的bean,但是没有代码可以做什么&#34;做什么&#34;。

我不知道blueprint-maven-plugin但我想这会在一个小容器内运行你的捆绑包。你怎么从maven调用它?

我非常怀疑使用运行您的项目&#34;运行帐户SHIFT + F10&#34; 您基本上将此应用程序作为常规Java应用程序而不是OSGi Blueprint软件包运行。< / p>