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

时间:2010-02-06 01:18:41

标签: java netbeans jar

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

4 个答案:

答案 0 :(得分:8)

JAR File Specification每个JAR只允许一个Main-Class属性,但JAR可能有任意数量的类声明main()方法。除非明确排除,否则任何此类都将包含在项目的Build Packaging属性中。

作为具体示例,H2 Database包含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

答案 1 :(得分:4)

我不知道Netbeans是如何工作的,但是在JAR中放置多个主类应该没问题。实际上,主类只是一个具有main方法的类,而JAR是一个类文件的集合 唯一的限制是只有一个类可以通过双击JAR来启动。

要启动每个类,您不能使用-jar选项,而是提供完整的类名 例如,如果JAR中有Client和Server类,则客户端由
启动 java -cp file.jar Client
和服务器由 java -cp file.jar Server

一个选项是创建第三个 starter 类,用于根据命令行参数(或GUI窗口)启动服务器或客户端。

答案 2 :(得分:3)

我认为'主类'的目的意味着最终的JAR'清单文件,将一个类标记为'要运行的类':这样最终用户只需双击它*或运行一个简化的命令行,如:

java -jar <jar>

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

java -cp <jar> com.yourcom.package.classname

如果我是对的,那么我不知道拥有多个主要课程会有多大意义? 也许我误解了你的问题 - 或者'主'班有另一个目的吗?

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

public static void main(String[] args)

它应该可以正常工作。

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

答案 3 :(得分:0)

在netbeans中,如果你想用你选择的主类创建项目的jar文件,那么, 1. 右键单击您的项目(如果找不到您的项目,请转到窗口 - &gt;来自netbeans菜单栏的项目) 2. 转到设置配置 - &gt;定制 3. 选择从类别运行,在主类中编写packagename.classname (即你在mypackage中创建了文件xyz,然后编写mypackage.xyz) 4. 点击确定。
5. 再次右键单击projectname,选择clean and build。 6.您的jar文件是在projectname的位置创建的 - &gt; dist - &gt; projectname.jar