Main-Class: Manifest: cómo definir un punto de entrada con argumentos

Tengo un archivo jar con un punto de entrada predefinido en su archivo de manifiesto. Y se puede ejecutar con éxito.

hadoop jar hadoop-test-1.0.2.jar -write -nrFiles 1 -fileSize 10
TestDFSIO.0.0.4
12/06/11 21:35:09 INFO fs.TestDFSIO: nrFiles = 1
12/06/11 21:35:09 INFO fs.TestDFSIO: fileSize (MB) = 10
12/06/11 21:35:09 INFO fs.TestDFSIO: bufferSize = 1000000
12/06/11 21:35:09 INFO fs.TestDFSIO: creating control file: 10 mega bytes, 1 files
12/06/11 21:35:09 INFO fs.TestDFSIO: created control files for: 1 files
12/06/11 21:35:10 INFO mapred.FileInputFormat: Total input paths to process : 1
12/06/11 21:35:10 INFO mapred.JobClient: Running job: job_201206110904_0029
12/06/11 21:35:11 INFO mapred.JobClient:  map 0% reduce 0%
12/06/11 21:35:25 INFO mapred.JobClient:  map 100% reduce 0%
12/06/11 21:35:37 INFO mapred.JobClient:  map 100% reduce 100%
...

Ahora mi preocupación es cómo ejecutar el jar sin las opciones. Quiero decir que solo quiero invocar:

hadoop jar hadoop-test-1.0.2.jar

Necesito definir de alguna manera los argumentos como "-write -nrFiles 1 -fileSize 10"dentro del archivo jar. ¿Pero cómo?

¿Cómo puedo definirlo en el archivo de manifiesto? Sé que puedo generar una clase propia que luego inicia la clase de prueba con estos parámetros. ¿Pero hay alguna otra solución?

Sorprendentemente: definió una clase que llama a la clase requerida con los argumentos.

Prueba de ejecución:

hadoop jar hadoop-test-1.0.2.jar 
RunJar jarFile [mainClass] args...

Con el nombre de la clase como arg, ¡funciona!

hadoop jar hadoop-test-1.0.2.jar Start
TestDFSIO.0.0.4
12/06/12 01:05:11 INFO fs.TestDFSIO: nrFiles = 10
12/06/12 01:05:11 INFO fs.TestDFSIO: fileSize (MB) = 1000
12/06/12 01:05:11 INFO fs.TestDFSIO: bufferSize = 1000000
12/06/12 01:05:11 INFO fs.TestDFSIO: creating control file: 1000 mega bytes, 10 files
12/06/12 01:05:11 INFO fs.TestDFSIO: created control files for: 10 files
12/06/12 01:05:11 INFO mapred.FileInputFormat: Total input paths to process : 10
12/06/12 01:05:12 INFO mapred.JobClient: Running job: job_201206110904_0033
...

Contenido de mi manifiesto:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 20.1-b02 (Sun Microsystems Inc.)
Main-Class: Start

Name: org/apache/hadoop
Implementation-Title: Hadoop
Implementation-Version: 1.0.2
Implementation-Vendor: Apache

El contenido de Start.java:

import org.apache.hadoop.fs.TestDFSIO;
public class Start {

        public static void main(String[] args) throws Exception{
                String [] myargs  = {"-write","-nrFiles","10","-fileSize","1000"};

                TestDFSIO.main(myargs);

        }
}

¿Qué estoy haciendo mal? ¿Por qué no puedo ejecutar Start usando el archivo jar sin argumentos para ejecutar la clase original TestDFIO? ¡Gracias!

Respuesta 1

Tenemos una aplicación web Spring MVC (WAR) que se implementa en Tomcat (6.0.35) que lanza un hilo dentro de una JVM separada en el momento de la implementación (no pregunte por qué, no mi diseño) y luego se comunica con ese hilo a través de ...

No estoy seguro de si esto es posible. Tengo una biblioteca de terceros que tiene una función que acepta una función File: String (File file); Esta función simplemente descargará algunos contenidos del ...

Necesito verificar un patrón contra algún texto (tengo que verificar si mi patrón está dentro de muchos textos). Este es mi ejemplo Patrón de cadena = "^ [a-zA-Z] * toto win (\\ W) * [a-zA-Z] * $"; if ("toto win ...

¿Hay alguna manera de configurar Sonar para ignorar sentencias if de una sola línea como if (value == true) return; mientras marca declaraciones if de varias líneas sin llaves, como if (value == true) return; como ...