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

340
Views
Janino no puede encontrar java.sql.PreparedStatement si prueba mvn

Una prueba de unidad simple (sin junit) da una extraña excepción

 import java.io.StringReader; import java.sql.PreparedStatement; import org.codehaus.janino.SimpleCompiler; public class TestJanino { public void testJanino() throws Exception { PreparedStatement ps = null; String sampleClass = "import java.sql.PreparedStatement; public class Test{}"; SimpleCompiler sc = new SimpleCompiler(); sc.setParentClassLoader(getClass().getClassLoader()); sc.cook("Test.java", new StringReader(sampleClass)); System.out.println(sc.getBytecodes().size()); } public static void main(String[] args) throws Exception { TestJanino d = new TestJanino(); d.testJanino(); } }

El mensaje es:

 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ xx.xxx.server.nn --- [WARNING] useSystemClassloader setting has no effect when not forking [INFO] Surefire report directory: D:\workspace\XXXX\xx.xxx.server.nn\target\surefire-reports ------------------------------------------------------- TESTS ------------------------------------------------------- Running xx.xxx.server.nn.TestJanino Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.057 sec <<< FAILURE! xx.xxx.server.nn.TestJanino.testJanino() Time elapsed: 0.056 sec <<< FAILURE! org.codehaus.commons.compiler.CompileException: File 'Test.java', Line 1, Column 1: A class "java.sql.PreparedStatement" could not be found at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:12679) at org.codehaus.janino.UnitCompiler.getSingleTypeImport(UnitCompiler.java:10639) at org.codehaus.janino.UnitCompiler.checkForConflictWithSingleTypeImport(UnitCompiler.java:454) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:410) at org.codehaus.janino.UnitCompiler.access$400(UnitCompiler.java:231) at org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:391) at org.codehaus.janino.UnitCompiler$2.visitPackageMemberClassDeclaration(UnitCompiler.java:386) at org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java:1692) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:386) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:359) at org.codehaus.janino.UnitCompiler.access$000(UnitCompiler.java:231) at org.codehaus.janino.UnitCompiler$1.visitCompilationUnit(UnitCompiler.java:333) at org.codehaus.janino.UnitCompiler$1.visitCompilationUnit(UnitCompiler.java:330) at org.codehaus.janino.Java$CompilationUnit.accept(Java.java:367) at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java:330) at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:245) at org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java:473) at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:223) at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java:209) at xx.xxx.server.nn.TestJanino.testJanino(TestJanino.java:14) Results : Failed tests: xx.xxx.server.nn.TestJanino.testJanino(): File 'Test.java', Line 1, Column 1: A class "java.sql.PreparedStatement" could not be found Tests run: 1, Failures: 1, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.738 s [INFO] Finished at: 2021-12-14T07:52:08+01:00 [INFO] ------------------------------------------------------------------------

Pero si ejecuto el principal sin maven, se resuelve:

ingrese la descripción de la imagen aquí

¿Cómo es eso posible?

Este es mi pom.xml :

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>xx.xxx</groupId> <version>xxx-SNAPSHOT</version> <properties> <forkMode>never</forkMode> </properties> <artifactId>xxx</artifactId> <dependencies> <dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.1.6</version> </dependency> </dependencies> </project>
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Finalmente pude reproducir su problema con Java 11 y Maven 3.8.

Como se indica en los comentarios de la pregunta, el problema parece estar relacionado con el hecho de que el complemento seguro de Maven no utiliza el cargador de clases del sistema. Por favor, considere leer la documentación pertinente .

Puede verificar ese punto usando la siguiente configuración del complemento:

 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <useSystemClassLoader>false</useSystemClassLoader> </configuration> </plugin> </plugins> </build>

No está proporcionando esta configuración explícitamente, sino como se indica en el seguimiento de Maven:

 ... [WARNING] useSystemClassloader setting has no effect when not forking ...

no está utilizando bifurcación, que es coherente con la configuración proporcionada en su pom.xml :

 <properties> <forkMode>never</forkMode> </properties>

Para resolver el problema, puede eliminar esa configuración y la prueba se ejecutará sin más problemas.

Habiendo dicho eso, como también dije en los comentarios, probé el código con diferentes versiones de Maven y JDK 8 y funcionó incluso configurando useSystemClassloader en false , por lo que honestamente no puedo decirle la razón exacta del problema, probablemente puede haber que ver con la versión JDK, pero podría ser la versión Maven o incluso Janino también.

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!