我是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
答案 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>