用sh命令创建java文件

问题描述:

你好我有一个java程序。我有一个应该执行程序的脚本。脚本看起来像这样用sh命令创建java文件

sh compress.sh -f myfile.txt [-o myfile.hzip -s] 

如何从我的java程序创建可执行文件以便它可以从此脚本执行?

+1

你的问题措辞不佳。你是问如何从JAVA程序中执行这个脚本? – 2013-03-17 15:34:46

+1

我的意思是说这个脚本应该能够执行我的java程序。 – Maverick 2013-03-17 15:35:33

+2

如果我是你,我会用相应的java命令创建一个shell脚本。 例如:javac的 myfile.java 的Java MYFILE – 2013-03-17 15:35:34

MyApp.java:

public class MyApp { 
    public static void main(String []args) { 
     //Do something with args... 
    } 
} 

compress.sh:

#!/bin/sh 

#Specify your Java class here (must contain a main method) 
JAVA_CMD="java MyApp" 

#JAR variant (a more common approach) 
#JAVA_CMD="java -jar myjar.jar" 

#Map script arguments to java app arguments. Use flag specific variables, if it's more convinient for you. 
while getopts "f:o:s" opt; do 
    case $opt in 
    f) 
     JAVA_CMD="$JAVA_CMD -f $OPTARG" 
     ;; 
    o) 
     JAVA_CMD="$JAVA_CMD -o $OPTARG" 
     ;; 
    s) 
     JAVA_CMD="$JAVA_CMD -s" 
     ;; 
    *) 
     echo "Invalid usage..." >&2 
     exit 1; 
     ;; 
    esac 
done 

#Additional validation (required options etc.) 
#... 

echo "Launching Java: $JAVA_CMD" 
$JAVA_CMD 

编译类,然后运行该脚本。如果您使用任何外部库,您可能需要在JAVA_CMD中包含an additional classpath argument

如果您打算使用JAR,那么请确保您的MANIFEST.mf具有所有必需的信息(特别是有效的Main-Class条目)。进一步的说明可以找到here

如果这是一个Maven项目,比你可以在一个简单的步骤使用Maven Assembly Plugin创建可执行的JAR。只需运行mvn程序集:程序集。

+0

好吧,我用上面的脚本写了一个名为compress.sh的文件。但是,我如何将命令行参数传递给我的java类?例如sh compress.sh -f myfile.txt [-o myfile.hzip -s]我应该能够将myfile.txt名称传递给我的java类 – Maverick 2013-03-17 20:30:40

+1

命令行参数可以通过主方法中的_args_数组访问。执行Java MyApp ABCD将导致args [0] ==“ABCD”。更多的例子可以在这里找到(http://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html)。 – 2013-03-17 20:39:07