[英]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.