我想编译并打包此示例代码:
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$ javac -cp
asterisk-java.jar ExampleCallIn.java
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$ java -cp
asterisk-java.jar org.asteriskjava.fastagi.DefaultAgiServer Apr 20, 2015
12:19:20 PM org.asteriskjava.fastagi.DefaultAgiServer startup INFO:
Listening on *:4573.
^Cthufir@dur:~/NetBeansProjects/HelloAsterisk/src$
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$ ls asterisk-java.jar
ExampleCallIn.class ExampleCallIn.java fastagi-mapping.properties
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$ cat ExampleCallIn.java
import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;
public class ExampleCallIn extends BaseAgiScript {
@Override public void service(AgiRequest request, AgiChannel channel)
throws
AgiException {
answer();
exec("Playback", "tt-monkeys");
hangup();
}
}
thufir@dur:~/NetBeansProjects/HelloAsterisk/src$
在 Netbeans 中。但是,没有主类。当我在 Netbeans 中将其构建为 JAR 时:
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ ll
total 568
drwxrwxr-x 3 thufir thufir 4096 Apr 20 12:57 ./
drwxrwxr-x 6 thufir thufir 4096 Apr 20 12:57 ../
-rw-rw-r-- 1 thufir thufir 562907 Apr 20 12:57 HelloAsterisk.jar
drwxrwxr-x 2 thufir thufir 4096 Apr 20 12:57 lib/
-rw-rw-r-- 1 thufir thufir 1328 Apr 20 12:57 README.TXT
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ ll lib/
total 560
drwxrwxr-x 2 thufir thufir 4096 Apr 20 12:57 ./
drwxrwxr-x 3 thufir thufir 4096 Apr 20 12:57 ../
-rw-rw-r-- 1 thufir thufir 561237 Apr 20 12:57 asterisk-java-1.0.0.jar
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ jar -tf HelloAsterisk.jar
META-INF/
META-INF/MANIFEST.MF
ExampleCallIn.class
asterisk-java.jar
fastagi-mapping.properties
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ java -jar HelloAsterisk.jar
Error: Could not find or load main class helloasterisk.HelloAsterisk
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
与 MANIFEST.MF 一样:
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ jar -xf HelloAsterisk.jar
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.7.0_75-b13 (Oracle Corporation)
Class-Path: lib/asterisk-java-1.0.0.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: helloasterisk.HelloAsterisk
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
如何构建和打包此示例代码,以便将其打包为 JAR,并使用 java -jar
命令运行?
我有理由确定 list 需要修改。或者,也许,当使用 java -jar
执行时,应该传递一些 CLI 选项?
首选的解决方案是自定义 list ,以便我可以按 IDE 中的“运行”按钮来运行 JAR。
------------------------------------------------------------ ----------------------------------更新
抱歉,上面有一个jar中的jar,因为src目录下有一个jar文件。删除该 jar 会得到:
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ java -jar HelloAsterisk.jar
Error: Could not find or load main class helloasterisk.HelloAsterisk
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ ls lib/
asterisk-java-1.0.0.jar
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ jar -tf HelloAsterisk.jar
META-INF/
META-INF/MANIFEST.MF
ExampleCallIn.class
fastagi-mapping.properties
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
和
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ jar -xf HelloAsterisk.jar
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.7.0_75-b13 (Oracle Corporation)
Class-Path: lib/asterisk-java-1.0.0.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: helloasterisk.HelloAsterisk
thufir@dur:~/NetBeansProjects/HelloAsterisk/dist$
从该组织来看, list 应该是什么样子?有一个使用 Class-Path: lib/asterisk-java-1.0.0.jar
指定的 jar。
请记住,从 CLI 执行 .class
文件时,没有主类!
另请参阅:
http://article.gmane.org/gmane.comp.telephony.pbx.asterisk.java/18
最佳答案
Jar 文件不得嵌入其他 jar 文件中。那是行不通的。 根据您拥有的 list ,结构必须是
some-folder
HelloAsterisk.jar
lib
asterisk-java-1.0.0.jar
然后,使用某个文件夹,您就可以运行
java -jar HelloAsterisk.jar
(假设 helloasterisk.HelloAsterisk 类确实存在于这两个 jar 之一中)。
关于java - 使用 Netbeans 将示例应用程序打包并作为 JAR 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757325/