Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

486
Views
Problema al configurar el script de inicio de H2. El archivo no se encuentra cuando el script no está en la carpeta raíz de classpath mientras se usa el sistema modular Java

Siguiente respuesta aceptada para la pregunta sobre cómo iniciar runscript desde la carpeta de recursos: problema con INIT=RUNSCRIPT y rutas relativas .

Cadena de conexión:

 jdbc:h2:mem:;INIT=RUNSCRIPT FROM 'classpath:desktop/core/database/databaseCreation.sql'

Sin embargo, recibo la excepción de que el archivo no se encuentra incluso cuando el archivo está presente.

presente archivo

Excepción:

 org.h2.jdbc.JdbcSQLNonTransientException: IO Exception: "java.io.FileNotFoundException: resource /desktop/core/database/databaseCreation.sql"; "classpath:desktop/core/database/databaseCreation.sql"; SQL statement: RUNSCRIPT FROM 'classpath:desktop/core/database/databaseCreation.sql' [90031-210] at com.h2database@2.1.210/org.h2.message.DbException.getJdbcSQLException(DbException.java:573) at com.h2database@2.1.210/org.h2.message.DbException.getJdbcSQLException(DbException.java:496) at com.h2database@2.1.210/org.h2.message.DbException.get(DbException.java:216) at com.h2database@2.1.210/org.h2.message.DbException.convertIOException(DbException.java:461) at com.h2database@2.1.210/org.h2.command.dml.ScriptBase.openInput(ScriptBase.java:168) at com.h2database@2.1.210/org.h2.command.dml.RunScriptCommand.update(RunScriptCommand.java:52) at com.h2database@2.1.210/org.h2.command.CommandContainer.update(CommandContainer.java:174) at com.h2database@2.1.210/org.h2.command.Command.executeUpdate(Command.java:252) at com.h2database@2.1.210/org.h2.engine.Engine.openSession(Engine.java:279) at com.h2database@2.1.210/org.h2.engine.Engine.createSession(Engine.java:201) at com.h2database@2.1.210/org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) at com.h2database@2.1.210/org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) at com.h2database@2.1.210/org.h2.Driver.connect(Driver.java:59) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:252) at ispfdesktop/desktop.core.database.DatabaseManager.connectToInMemoryDatabase(DatabaseManager.java:184) at ispfdesktop/desktop.core.database.CRUDTests.setUpBeforeClass(CRUDTests.java:21) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptLifecycleMethod(TimeoutExtension.java:126) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptBeforeAllMethod(TimeoutExtension.java:68) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllMethods$9(ClassBasedTestDescriptor.java:384) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllMethods(ClassBasedTestDescriptor.java:382) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:196) at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:78) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:136) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:84) at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:98) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210) Caused by: java.io.FileNotFoundException: resource /desktop/core/database/databaseCreation.sql at com.h2database@2.1.210/org.h2.store.fs.disk.FilePathDisk.newInputStream(FilePathDisk.java:386) at com.h2database@2.1.210/org.h2.store.fs.FileUtils.newInputStream(FileUtils.java:267) at com.h2database@2.1.210/org.h2.command.dml.ScriptBase.openInput(ScriptBase.java:166) ... 69 more

Intentar acceder al archivo usando getResource (la clase DatabaseManager está en el paquete desktop.core.database) indica que el archivo existe:

 String file = DatabaseManager.class.getResource("databaseCreation.sql").getFile(); boolean yes = new File(file).exists(); // yes is true

Probado en la plataforma Windows (10) y Linux (Kubuntu) y usando h2 de la versión 2.1.210.

ACTUALIZACIÓN #1

El archivo se encuentra cuando está en la carpeta classpath:databaseCreation.sql , pero aún no cuando está en alguna subcarpeta como escritorio/núcleo/base de datos.

Agregar '/' antes de la primera subcarpeta no funciona.

Intenté poner el archivo sql en todas las carpetas.

'classpath:desktop/core/database/databaseCreation.sql' no funciona

'classpath:desktop/core/databaseCreation.sql' no funciona

'classpath:desktop/databaseCreation.sql' no funciona

solo esto funciona

'classpath:databaseCreation.sql'

Sin usar classpath:

Sin usar classpath, el archivo puede estar en cualquier subcarpeta, pero de esta manera, necesito usar la ruta absoluta al archivo:

 jdbc:h2:mem:;INIT=RUNSCRIPT FROM '<absolute path here>'

Dejo la pregunta abierta ya que la pregunta a la que se hace referencia tiene una respuesta desactualizada, que no funciona en la versión actual de H2 y quiere saber cómo hacer que funcione usando classpath .

ACTUALIZACIÓN #2

Para replicar, debe usar el sistema modular Java (module-info.java) en el proyecto.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

ACTUALIZACIÓN: (módulo-info.java)

Según su comentario, su configuración original usaba módulos JDK 9+. Ese es un tema complejo y confuso. Sería más fácil simplemente eliminar module-info.java y no usar módulos. Si tiene la intención de usar módulos y mantener los recursos en un directorio separado (módulo), hay múltiples opciones sin una opción clara. Quizás la opción más fácil sería abrir el "paquete" que contiene el recurso. Algo como esto funcionó en mi prueba local:

 module myAppModule { exports desktop.core.database; opens desktop.core.database; requires java.sql; requires org.junit.jupiter.api; }

Más información:

  • https://www.oracle.com/corporate/features/understanding-java-9-modules.html
  • Cargando clases y recursos en Java 9
  • Acceso a archivos de recursos en un módulo de rompecabezas de Java
  • Cómo acceder a los recursos usando el cargador de clases en Java 9
  • Acceso a archivos de recursos desde módulos externos

ORIGINAL

No pude replicar su problema usando una configuración maven muy simple con solo el tiempo de ejecución H2 como dependencia (misma versión, 2.1.210) junto con JUnit 5. Funcionó como se esperaba.

El seguimiento de la pila muestra que esto se está ejecutando como una prueba desde dentro de Eclipse. Podría replicar su problema exactamente en Eclipse si agregara manualmente src/main/resources como una carpeta de origen de Java Build Path, pero con una exclusión de **/ que excluiría los subdirectorios de recursos.

Si está utilizando maven, tal vez intente ejecutar en la línea de comandos con mvn test para verificar que no sea su configuración de Eclipse.

De lo contrario, deberá publicar más información para obtener ayuda.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!