簡體   English   中英

Maven bundle插件 - 如何添加主類

[英]Maven bundle plugin - How to add main class

我有一個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();
    }
}

我在maven-bundle-plugin中指定了主類<Main-Class>com.mbean.Main</Main-Class> 它與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)

誰能幫我這個?

接受的答案是不正確的, maven-bundle-plugin確實支持任何清單頭 標頭是否是OSGI規范的一部分並不重要。

清單標題 - 以大寫字母開頭的任何指令都將出現在生成的包的清單文件中; 標題的值將由BND復制,擴充或生成,具體取決於指令。

問題中的配置是正確的。

<configuration>
    <instructions>
        <Main-Class>com.mbean.Main</Main-Class>
    </instructions>
</configuration>

我想問題可能是一個錯誤的jar被加載(其他插件可能有多個jar文件)或者可能存在一些內置或緩存問題,並且jar文件不是最新的。

Main-Class 不是OSGi包標准的一部分 ,我不相信maven-bundle-plugin可以識別它。

您可以按照使用現有MANIFEST.MF文件的說明進行操作並添加指令

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

然后在該文件中包含Main-Class指令。 這有點笨重,這可能表明你正在使用錯誤的工具來完成工作。 如果你只需要一個可執行的jar文件,那么還有其他可能更合適的Maven插件,比如maven-jar-plugin

將以下內容添加到pom中的maven-bundle-plugin部分...

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

關心羅蘭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM