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