2

私はOSGiを初めて使用し、いくつかのバンドルのみをコーディングして手動でデプロイしました。私の友人の何人かは、Eclipseで管理するバンドルを自動展開できるVirgoおよびVirgoツールについて教えてくれました。

私は現在、これらすべてを設定しようとしています。私はvirgo-tomcat-server-3.5.0.RELEASEとvirgotools1.0.0を持っており、これらすべてがSpring Tool Suite 3.1.0.RELEASEにインストールされています(わからない場合は、この最後の1つにm2eclipseプラグイン)。

私のバンドルはMavenプロジェクトです。これはbndプラグインを使用し、その構成は次のとおりです

<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
    <instructions>
        <Export-Package>fr.tpepio.mtg.model</Export-Package>
    </instructions>
</configuration>
<executions>
    <execution>
        <id>build-manifest</id>
        <phase>compile</phase>
        <goals>
            <goal>manifest</goal>                           
        </goals>                        
    </execution>
</executions>

1つのパッケージのみをエクスポートしていることがわかります。また、eclipseがクラスをコンパイルするときに、m2eclipseを作成してmanifest.mfファイルを動的に生成しようとしています。

私はついに私が直面している問題にたどり着きます。

  1. バンドルをMavenプロジェクトとしてSTSにインポートするため、Virgoファセットを追加する必要があります。そして、Maven構成を更新するとすぐに、プロジェクトが台無しになり、次のエラーが発生します。

    Java compiler level does not match the version of the installed Java project facet.
    
  2. 私の(くだらない)Maven構成からのアパート、私は自分のプロジェクトをvirgoサーバーに追加できないことに気づきました。

    null reason : null
    

誰かが手がかりを持っていますか?

4

1 に答える 1

2

やあ!問題は解決しました。

最初に:JavaコンパイラとファセットのJavaバージョンについて。ソースが1.6でコーディングされており、1.6でコンパイルする必要があることをMavenに伝えると、問題が解決します。コードは次のとおりです。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<inherited>true</inherited>
<configuration>
    <verbose>false</verbose>
    <encoding>${java.compiler.encoding}</encoding>
    <fork>true</fork>
    <source>${java.compile.version}</source>
    <target>${java.compile.version}</target>
</configuration>

私のプロジェクト構成とSTS構成の両方がjava6しか使用できなかったので、なぜそれがこの問題を解決するのかまだわかりません...これは私のソースが1.5javaソースとしてコンパイルされたためだと思います。

2番目:Mavenバンドルプロジェクトをvirgoに追加します。

  1. 正しいMavenフェーズで「マニフェスト」ゴールを実行して(たとえば、クラスがコンパイルされた後)、bndを正しく構成し、マニフェストがどこにあるかを彼に伝えます。これにより、「nullの理由:null」の問題が解決されます(おそらく、virgoは「manifest.mfを見つけることができませんでした...?」と言ったはずです)。

    <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.7</version>
    <extensions>true</extensions>
    <configuration>
            <instructions>
                    <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Name>${project.name}</Bundle-Name>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Bundle-ClassPath>.</Bundle-ClassPath>
                    <Export-Package>
                            [packages you want to export]
                    </Export-Package>
            </instructions>
    </configuration>
    <executions>
            <execution>
                    <id>bundle-manifest</id>
                    <phase>process-classes</phase>
                    <goals>
                            <goal>manifest</goal>
                    </goals>
                    <configuration>
                            <manifestLocation>src/main/resources/META-INF/</manifestLocation>
                    </configuration>
            </execution>
    </executions>
    

  2. この目標をm2eclipseライフサイクルマッピングに追加します。これにより、bnd構成で指定したフェーズ(ここでは、プロセスクラスフェーズ)が発生するたびにマニフェストが更新されます。そうでなければ、m2eclipseはあなたの目標をいつ呼び出すべきかを理解する方法がありません。

    <pluginManagement>
    <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                            <lifecycleMappingMetadata>
                                    <pluginExecutions>
                                            <!-- Maven Bundle Plugin -->
                                            <pluginExecution>
                                                    <pluginExecutionFilter>
                                                            <groupId>org.apache.felix</groupId>
                                                            <artifactId>maven-bundle-plugin</artifactId>
                                                            <versionRange>[2.3.7,)</versionRange>
                                                            <goals>
                                                                    <goal>manifest</goal>
                                                            </goals>
                                                    </pluginExecutionFilter>
                                                    <action>
                                                            <execute>
                                                                    <runOnIncremental>false</runOnIncremental>
                                                            </execute>
                                                    </action>
                                            </pluginExecution>
                                    </pluginExecutions>
                            </lifecycleMappingMetadata>
                    </configuration>
            </plugin>
    </plugins>
    

これがお役に立てば幸いです。

于 2012-10-29T10:01:26.220 に答える