[ https://issues.apache.org/jira/browse/AVRO-3371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17488372#comment-17488372 ]
ASF subversion and git services commented on AVRO-3371: ------------------------------------------------------- Commit 460b2b3683d98d40630da86d3b466e94015b9d7e in avro's branch refs/heads/branch-1.11 from Radai Rosenblatt [ https://gitbox.apache.org/repos/asf?p=avro.git;h=460b2b3 ] AVRO-3371 - add empty string as 3rd velocity root in SpecificCompiler to be able to load resources by absolute path on windows (#1521) > velocity fails to find file by absolute path on windows > ------------------------------------------------------- > > Key: AVRO-3371 > URL: https://issues.apache.org/jira/browse/AVRO-3371 > Project: Apache Avro > Issue Type: Bug > Components: java > Affects Versions: 1.11.0 > Reporter: radai rosenblatt > Assignee: Radai Rosenblatt > Priority: Major > Labels: pull-request-available > Fix For: 1.11.1 > > Time Spent: 0.5h > Remaining Estimate: 0h > > when building master on windows, I get the following failure in the > avro-maven-plugin java module: > {code:java} > [INFO] Running org.apache.avro.mojo.TestIDLProtocolMojo > [ERROR] Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.2 s > <<< FAILURE! - in org.apache.avro.mojo.TestIDLProtocolMojo > [ERROR] > org.apache.avro.mojo.TestIDLProtocolMojo.testSetCompilerVelocityAdditionalTools > Time elapsed: 0.06 s <<< ERROR! > java.lang.RuntimeException: > org.apache.velocity.exception.ResourceNotFoundException: Unable to find > resource > 'C:\Users\radai\work\avro\lang\java\maven-plugin/src/test/resources/templates/enum.vm' > at > org.apache.avro.compiler.specific.SpecificCompiler.renderTemplate(SpecificCompiler.java:551) > at > org.apache.avro.compiler.specific.SpecificCompiler.compile(SpecificCompiler.java:629) > at > org.apache.avro.compiler.specific.SpecificCompiler.compileToDestination(SpecificCompiler.java:538) > at > org.apache.avro.mojo.IDLProtocolMojo.doCompile(IDLProtocolMojo.java:107) > at > org.apache.avro.mojo.AbstractAvroMojo.compileFiles(AbstractAvroMojo.java:281) > at > org.apache.avro.mojo.AbstractAvroMojo.execute(AbstractAvroMojo.java:231) > at > org.apache.avro.mojo.TestIDLProtocolMojo.testSetCompilerVelocityAdditionalTools(TestIDLProtocolMojo.java:68) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at junit.framework.TestCase.runTest(TestCase.java:177) > at junit.framework.TestCase.runBare(TestCase.java:142) > at junit.framework.TestResult$1.protect(TestResult.java:122) > at junit.framework.TestResult.runProtected(TestResult.java:142) > at junit.framework.TestResult.run(TestResult.java:125) > at junit.framework.TestCase.run(TestCase.java:130) > at junit.framework.TestSuite.runTest(TestSuite.java:241) > at junit.framework.TestSuite.run(TestSuite.java:236) > at > org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90) > at org.junit.runners.Suite.runChild(Suite.java:128) > at org.junit.runners.Suite.runChild(Suite.java:27) > at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) > at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) > at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) > at org.junit.runners.ParentRunner.run(ParentRunner.java:413) > at org.junit.runners.Suite.runChild(Suite.java:128) > at org.junit.runners.Suite.runChild(Suite.java:27) > at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) > at > org.apache.maven.surefire.junitcore.pc.Scheduler$1.run(Scheduler.java:405) > at > org.apache.maven.surefire.junitcore.pc.InvokerStrategy.schedule(InvokerStrategy.java:54) > at > org.apache.maven.surefire.junitcore.pc.Scheduler.schedule(Scheduler.java:362) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) > at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) > at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) > at org.junit.runners.ParentRunner.run(ParentRunner.java:413) > at > org.apache.maven.surefire.junitcore.pc.ParallelComputerBuilder$PC$1.run(ParallelComputerBuilder.java:590) > at > org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:107) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:83) > at > org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75) > at > org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:157) > at > org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428) > at > org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) > at > org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562) > at > org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548) > Caused by: org.apache.velocity.exception.ResourceNotFoundException: Unable to > find resource > 'C:\Users\radai\work\avro\lang\java\maven-plugin/src/test/resources/templates/enum.vm' > at > org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:465) > at > org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:346) > at > org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1677) > at > org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1656) > at > org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:314) > at > org.apache.avro.compiler.specific.SpecificCompiler.renderTemplate(SpecificCompiler.java:549) > ... 50 more {code} > this fails 2 other tests in the same module as well: > {code:java} > [ERROR] Errors: > [ERROR] TestIDLProtocolMojo.testSetCompilerVelocityAdditionalTools:68 ▒ > Runtime org.ap... > [ERROR] TestProtocolMojo.testSetCompilerVelocityAdditionalTools:59 ▒ > Runtime org.apach... > [ERROR] TestSchemaMojo.testSetCompilerVelocityAdditionalTools:59 ▒ Runtime > org.apache.... {code} > the root issue as far as i can tell seems to be this velocity configuration > in SpecificCompiler: > {code:java} > private void initializeVelocity() { > ... > velocityEngine.addProperty("resource.loader.file.path", "/, ."); > ... > } {code} > which defines 2 "root paths": "/" and "." > however, under windows and given a path of the form "C:/<whatever>" this will > try looking for either "/C:/<whatever>" or "./C:/<whatever>" - both are > "wrong" for a windows absolute path. > relevant code is in > org.apache.velocity.runtime.resource.loader.FileResourceLoader.getFile(): > {code:java} > private File getFile(String path, String template) { > File file = null; > if("".equals(path)) { > file = new File( template ); <---- NEVER TAKEN > } else { > if (template.startsWith("/")) { > template = template.substring(1); > } > file = new File ( path, template ); > } > return file; > }{code} > quickest fix i can think of is add "" as a 3rd possible root to velocity > config in class SpecificCompiler -- This message was sent by Atlassian Jira (v8.20.1#820001)