5

依存関係が 1 つしかない Maven プロジェクト mjbean があります: TestA. mjbean の pom.xml は次のとおりです。

<groupId>com.mbean</groupId>
<artifactId>mjbean</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>

<build>
  <defaultGoal>install</defaultGoal>
  <plugins>
    <plugin>
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <extensions>true</extensions>
      <configuration>
        <instructions>
          <Main-Class>com.mbean.Main</Main-Class>
          <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
          <Embed-Transitive>true</Embed-Transitive>
          <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
          <Import-Package>*</Import-Package>
        </instructions>
      </configuration>
    </plugin>
  </plugins>
</build>

<name>mjbean</name>
<url>http://maven.apache.org</url>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>com.testa</groupId>
    <artifactId>TestA</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </dependency>
</dependencies>

メインクラスはとても簡単です:

package com.mbean;
import com.testa.Testcl;
public class Main {

public static void main(String[] args) {

    Testcl tcl = new Testcl();
    tcl.testmethod();
    }
}

<Main-Class>com.mbean.Main</Main-Class>maven-bundle-plugin でメインクラスを指定しました。Eclipseでうまく動作します。次に、Eclipse を使用して、ターゲット フォルダーにターゲット バンドルを生成します。コマンドラインで実行しようとすると、次のjava -jar mjbean-0.0.1-SNAPSHOT.jarエラーが発生しました。

Exception in thread "main" java.lang.NoClassDefFoundError: com/testa/Testcl
at com.mbean.Main.main(Main.java:12)
Caused by: java.lang.ClassNotFoundException: com.testa.Testcl
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

誰でもこれで私を助けることができますか?

4

3 に答える 3

1

Main-Classは OSGi bundle standard の一部ではなく、maven-bundle-plugin がそれを認識しているとは思えません。

既存の MANIFEST.MF ファイルを使用するための指示に従い、指示を追加できます。

<_include>src/main/resources/META-INF/MANIFEST.MF</_include>

次に、Main-Classそのファイルにディレクティブを含めます。これは少しぎこちなく、ジョブに間違ったツールを使用していることを示唆している可能性があります。実行可能な jar ファイルだけが必要な場合は、maven-jar-pluginなど、より適切な Maven プラグインが他にもあります。

于 2013-03-12T16:53:05.513 に答える
0

pom の maven-bundle-plugin セクションに以下を追加します...

   ...
    <configuration>
      <archive>
        <manifest>
           <mainClass>your.main.Main</mainClass>
        </manifest>
      </archive>
      ...

よろしくローランド

于 2013-09-19T16:50:47.147 に答える