Proyecto lanzando IOException (archivo no encontrado) cuando se ejecuta el tarro -- java campo con eclipse campo con maven campo con jar campo con properties camp Relacionados El problema

Project throwing IOException (File Not Found) when jar is run


0
vote

problema

Español

He hecho un proyecto en Java, usando Eclipse.

Aquí está la estructura del proyecto:

ingrese la descripción de la imagen aquí

Cuando ejecuto el proyecto en Eclipse como una aplicación Java, se ejecuta perfectamente bien.

Ahora, necesito exportarlo como un frasco. Por lo tanto, creé el frasco utilizando el método descrito en la 3ª respuesta en este enlace (respondido por fiebre):

no ejecutar el archivo jar Desde la línea de comandos: "No hay atributo principal de manifiesto"

Aquí está la salida de source11111 :

  source2  

Aquí está el archivo manifiesto:

  source3  

y, aquí es la excepción:

  source4  

Al ver la excepción, está claro que no puede cargar source5 que se está realizando en source6 .

aquí es source7 :

  source8  

¿Puede alguien decirme cuál es el problema y cómo resolver esto?

Esto funciona perfectamente cuando se ejecuta en el propio Eclipse.

editar1:

Ahora, la excepción es:

  source9  

línea n ° 35:

  target0  

Este es el código ahora:

  target1  
Original en ingles

I've made a project in java, using Eclipse.

Here is the project structure:

enter image description here

When I'm running the project in Eclipse as a java application, it runs perfectly fine.

Now, I need to export it as a jar. So, I created the jar using the method described in 3rd answer on this link (answered by Fever):

Failing to run jar file from command line: xe2x80x9cno main manifest attributexe2x80x9d

Here is the output of jar tf EventLogger.jar:

META-INF/MANIFEST.MF com/ com/project/ com/project/eventLogger/ com/project/eventLogger/KafkaConsumerGroup.class com/project/eventLogger/KafkaProducer.class com/project/eventLogger/ConsumeConfig.class com/project/eventLogger/ConsumerThread.class com/project/eventLogger/Formatter.class com/project/eventLogger/Execute.class com/project/eventLogger/Config.class com/project/eventLogger/package-info.class com/project/eventLogger/ProdConfig.class com/project/eventLogger/FormatConfig.class resources/ resources/Config.properties resources/ConsumerConfig.properties resources/FormatterConfig.properties resources/ProducerConfig.properties resources/log4j.properties 

Here is the manifest file:

Manifest-Version: 1.0 Built-By: vishrant Class-Path: lib/json-simple-1.1.1.jar lib/junit-4.10.jar lib/hamcrest-  core-1.1.jar lib/kafka_2.9.2-0.8.2.2.jar lib/jopt-simple-3.2.jar lib/  kafka-clients-0.8.2.2.jar lib/log4j-1.2.16.jar lib/lz4-1.2.0.jar lib/  metrics-core-2.2.0.jar lib/slf4j-api-1.7.6.jar lib/snappy-java-1.1.1.  7.jar lib/slf4j-log4j12-1.6.1.jar lib/zkclient-0.3.jar lib/zookeeper-  3.4.6.jar lib/jline-0.9.94.jar lib/netty-3.7.0.Final.jar lib/scala-li  brary-2.9.2-RC3.jar Build-Jdk: 1.8.0_74 Created-By: Maven Integration for Eclipse Main-Class: com.project.eventLogger.Execute 

and, here is the exception:

java.io.FileNotFoundException: ConsumerConfig.properties (No such file or directory)     at java.io.FileInputStream.open0(Native Method)     at java.io.FileInputStream.open(FileInputStream.java:195)     at java.io.FileInputStream.<init>(FileInputStream.java:138)     at java.io.FileInputStream.<init>(FileInputStream.java:93)     at com.project.eventLogger.ConsumeConfig.loadPropertiesFile(ConsumeConfig.java:34)     at com.project.eventLogger.ConsumeConfig.<clinit>(ConsumeConfig.java:42)     at com.project.eventLogger.Execute.main(Execute.java:18) Exception in thread "main" java.lang.ExceptionInInitializerError     at com.project.eventLogger.Execute.main(Execute.java:18) Caused by: java.lang.NullPointerException     at com.project.eventLogger.ConsumeConfig.<clinit>(ConsumeConfig.java:47)     ... 1 more 

Seeing the exception, it is clear that it is not able to load ConsumerConfig.properties which is being done in ConsumeConfig.java.

Here is ConsumeConfig.java:

import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Properties;  /**  * @author vishrant  *  */ public class ConsumeConfig {      public static String zookeeper;     public static String balance;     public static String bootstrap_servers;     public static String zk_session_to;     public static String zk_sync;     public static String auto_commit;     public static String[] topics;     private static String kafka_bin;     private static final String PROPERTIES_FILE_PATH = "src/main/resources/ConsumerConfig.properties";      private static Properties loadPropertiesFile() throws IOException {         Properties properties = new Properties();         InputStream in = new FileInputStream(PROPERTIES_FILE_PATH);         properties.load(in);         return properties;     }      static {         Properties property = null;         try {             property = loadPropertiesFile();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }         zookeeper = property.getProperty("ZOOKEEPER");         balance = property.getProperty("BALANCE");         bootstrap_servers = property.getProperty("BOOTSTRAP_SERVERS");         zk_session_to = property.getProperty("ZK_SESSION_TO");         zk_sync = property.getProperty("ZK_SYNC_TIME");         auto_commit = property.getProperty("AUTO_COMMIT_INTERVAL");         topics = property.getProperty("CONSUMER_TOPICS").split(",");         kafka_bin = property.getProperty("KAFKA_BIN_PATH");     } } 

Can someone tell me what is the problem and how to resolve this?

This runs perfectly well when run in Eclipse itself.

EDIT1:

Now, the exception is:

Exception in thread "main" java.lang.ExceptionInInitializerError     at com.project.eventLogger.Execute.main(Execute.java:18) Caused by: java.lang.NullPointerException     at java.util.Properties$LineReader.readLine(Properties.java:434)     at java.util.Properties.load0(Properties.java:353)     at java.util.Properties.load(Properties.java:341)     at com.project.eventLogger.ConsumeConfig.loadPropertiesFile(ConsumeConfig.java:35)     at com.project.eventLogger.ConsumeConfig.<clinit>       (ConsumeConfig.java:42)     ... 1 more 

line no 35:

props.load(resourceStream); 

This is the code now:

private static final String PROPERTIES_FILE_PATH = "ConsumerConfig.properties";  private static Properties loadPropertiesFile() throws IOException {     ClassLoader loader = Thread.currentThread().getContextClassLoader();     Properties props = new Properties();     InputStream resourceStream = loader.getResourceAsStream(PROPERTIES_FILE_PATH);     props.load(resourceStream);     return props; } 
              
       
       

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

Prueba esto

  // Change Your File Path First. private static final String PROPERTIES_FILE_PATH = "ConsumerConfig.properties";  private static Properties loadPropertiesFile() throws IOException {     Properties properties = new Properties();      // First way to load ResourceAsStream.     // ClassLoader loader = Thread.currentThread().getContextClassLoader();     // InputStream resourceStream = loader.getResourceAsStream(PROPERTIES_FILE_PATH);     // Second way to load ResourceAsStream.     InputStream resourceStream = ConsumeConfig.class.getResourceAsStream(PROPERTIES_FILE_PATH);     properties.load(resourceStream);     return properties; }   
 

try this

// Change Your File Path First. private static final String PROPERTIES_FILE_PATH = "ConsumerConfig.properties";  private static Properties loadPropertiesFile() throws IOException {     Properties properties = new Properties();      // First way to load ResourceAsStream.     // ClassLoader loader = Thread.currentThread().getContextClassLoader();     // InputStream resourceStream = loader.getResourceAsStream(PROPERTIES_FILE_PATH);     // Second way to load ResourceAsStream.     InputStream resourceStream = ConsumeConfig.class.getResourceAsStream(PROPERTIES_FILE_PATH);     properties.load(resourceStream);     return properties; } 
 
 
         
         
1
 
vote

Veo los siguientes problemas para ser la causa:

  • El archivo JAR no se crea correctamente para un proyecto Maven porque el directorio los recursos normalmente no se copiará en el directorio objetivo tal como está, es decir, en lugar de

recursos / config.properties

Debería verse sin el directorio de recursos :

config.properties

directamente debajo del directorio raíz del archivo JAR.

  • El segundo punto es que está utilizando lo siguiente en su código

PROPIEDADES FINAL DE FINAL DE ESTÁTICA PROPIEDAD_FILE_PATH = "SRC / PRINCIPAL / RECURSO / CONSULTERONFIG.PROPERIES";

Esta ruta no se verá fuera de su IDE (en este caso Eclipse) porque src / main / los recursos no debe existir en el archivo JAR como pueda ver en la lista de su archivo JAR .

  • El último punto es, debe usar GetReSourCeastream () del cargador de clase como Vikrant Kashyap ya señalado.
 

I see the following problems to be the cause:

  • The jar file is not created correctly for a maven project because the directory resources will normally be not copied to the target directory as is, i.e., instead of

resources/Config.properties

it should look like without the resources directory:

Config.properties

directly under the root directory of the jar file.

  • The second point is you are using the following in your code

private static final String PROPERTIES_FILE_PATH = "src/main/resources/ConsumerConfig.properties";

This path will not be seen outside of your IDE (in this case Eclipse) because src/main/resources should not exist in the jar file as you could see in the list of your jar file.

  • The last point is, you should use getResourceAsStream() of the class loader as Vikrant Kashyap already pointed.
 
 
         
         

Relacionados problema

0  Necesito ayuda sobre cómo implementar la clase que se puede mostrar en el inspector de objetos  ( I need help on how to implement class that can be shown in object inspector ) 
tengo ... TDispPitch = class private iLineSize: Integer; iLineColor: TColor; bDisplayAccent: Boolean; bVisible: Boolean; published ...

0  Cómo definir los atributos para todas las propiedades de un objeto simultáneamente (o establecer predeterminado)  ( How to define attributes for all properties of an object simultaneously or set ) 
Estoy escribiendo un proveedor de servicios de AngularJS (función) que: toma resultados de varias tablas diferentes de una base de datos SQLite devuelve ...

14  Propiedades LOG4J en un lugar personalizado  ( Log4j properties in a custom place ) 
Estoy usando el registro de APACE Commons y SLF4J con log4j, pero también quiero usar la Log4J.Properties en un lugar personalizado como Conf / log4.propertie...

10  Cómo hacer el archivo de propiedades en NetBeans  ( How to make properties file in netbeans ) 
Estoy trabajando en un proyecto de aplicación web Struts2 y usando NetBeans 6.9. Quiero crear un archivo de propiedades para mi proyecto. ¿Cómo hago eso en lo...

5  Primavera: reemplazando los valores de la propiedad de frijol con nuevos valores de archivo de propiedad  ( Spring replacing the bean property values with new property file values ) 
Tengo un archivo de propiedad y usando el titular de la propiedad de primavera, configuro valores a los frijoles de resorte. Ahora, este archivo de propiedad ...

7  Usando WIX ¿Cómo deshabilite / habilito los controles según el cambio de propiedad?  ( Using wix how do i disable enable controls based on property change ) 
Estoy teniendo un poco de un cerebro fundido en este momento en el que tengo un wix combobox y cuando cambio la selección quiero deshabilitar / habilitar otro...

0  SELLADO GET, RESUMEN CONJUNTO EN C # Propiedades  ( Sealed get abstract set in c sharp properties ) 
¿C # apoya esto? ¿Cuál es la sintaxis para esto? Quiero que la obtención de esta propiedad sea sellada (realmente no importa), y el conjunto de esto es abstra...

3  Propiedades de sobrecarga  ( Overloading properties ) 
Intenté sobrecargar en VBA dentro de un módulo de clase: Dim a As Integer Public Property Let SomeNumber(newNumber as Integer) a = newNumber End Proper...

9  Cómo implementar la propiedad () con el nombre dinámico (en Python)  ( How to implement property with dynamic name in python ) 
Estoy programando una simulación para neuronas solteras. Por eso tengo que manejar muchos parámetros. Ahora, la idea es que tengo dos clases, una para un solo...

28  ConfigurationManager.appSettings Preocupaciones de rendimiento  ( Configurationmanager appsettings performance concerns ) 
Planeo almacenar todas mis configuraciones de configuración en la sección APP.CONFIG de My Application (usando la clase ConfigurationManager.AppSettings ). A...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos