在netbeans中创建具有多个主类的jar

Zac*_*ach 5 java netbeans jar

我正在使用netbeans IDE在java中创建VoIP客户端服务器对.我想只使用一个项目,但我不熟悉netbeans如何创建Jar文件.我需要一个如果这是可能的,如果是的话,如何设置它.

tra*_*god 8

JAR文件规范只允许一个Main-Class每JAR属性,但JAR可具有其声明的类的任意数量的main()方法.Build Packaging除非特别排除,否则任何此类都将包含在项目的属性中.

作为具体示例,H2数据库包括以下类main():

org.h2.jdbcx.JdbcConnectionPool
org.h2.tools.Backup
org.h2.tools.ChangeFileEncryption
org.h2.tools.Console
org.h2.tools.ConvertTraceFile
org.h2.tools.ConvertTraceFile
org.h2.tools.CreateCluster
org.h2.tools.DeleteDbFiles
org.h2.tools.Recover
org.h2.tools.Restore
org.h2.tools.RunScript
org.h2.tools.Script
org.h2.tools.Server
org.h2.tools.Shell

附录:显然,我的垃圾抽屉项目需要维护.

$ find scratch/src -name \*java | xargs -J % egrep 'main[ \t]*\(Str' % | wc -l
     109


mon*_*nny 3

我相信“主类”的目的意味着最终的 JAR 清单文件将一个类标记为“要运行的类”:以便最终用户只需双击它*或运行简化的命令行喜欢:

java -jar <jar>

而不必指定整个包/类名称,例如:

java -cp <jar> com.yourcom.package.classname
Run Code Online (Sandbox Code Playgroud)

如果我是对的,那么我不明白拥有多个主类有什么意义?也许我误解了你的问题 - 或者“主”类还有其他目的?

如果您的意思是有两个具有“main”方法的类 - 那么这很好 - 最终用户可以按名称启动任何类 - 只要它们具有标准的 main 方法 sig,例如:

public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

它应该可以工作。

*(至少在 Windows 上,这是否有效还取决于他们拥有哪个 JRE 以及可能的其他东西)