Bug 1416413
| Summary: | Failed to load module org.modeshape: Unsupported major.minor | ||
|---|---|---|---|
| Product: | [JBoss] JBoss Data Virtualization 6 | Reporter: | Jan Stastny <jstastny> |
| Component: | ModeShape | Assignee: | Horia Chiorean <hchiorea> |
| Status: | CLOSED ERRATA | QA Contact: | Jan Stastny <jstastny> |
| Severity: | urgent | Docs Contact: | |
| Priority: | urgent | ||
| Version: | 6.3.0 | CC: | aszczucz, gjospin, hchiorea, jolee, jschatte, thauser, vhalbert |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2017-02-20 19:22:31 UTC | Type: | Support Patch |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | |||
| Bug Blocks: | 1393894 | ||
This is bug that creeped in with https://issues.jboss.org/browse/MODE-2647 as I forgot that the source code has to be JDK 1.6 compatible and added a test case which uses JDK 1.7 So I'll fix this in the product branch and re-tag to JDV 6.3.4 Created a new tag for JDV 6.3.4 - 3.8.x-prod-ip6.3-update4_3 - which fixes the issue. Tag acknowledged, I will put the trakcer bug to MODIFIED and start working on DV 6.3.4 CR2 We've found that maven now tries to compile the test for modeshape-client with a source/target of 1.6, which seems to defy the definition of 1.7 in the plugin execution. Obviously, since try-with-resources syntax is being used in the test, javac fails to compile the test. There seems to be some IPBOM/jboss-parent weirdness happening, where the productised version (14.0.0.redhat-1) defines the compilerArgs configuration value to be -source 1.6 -target 1.6, whereas the community version (16) defines the same to be -source 1.7 -target 1.7. This overrides the regular definition of source and target in maven-compiler-plugin's configuration. Normally I would just disable the test, but it seems that you really want this one to run Horia? Our options, assuming keeping the test, are to either alter the test such that it uses 1.6 syntax, or to change the pom such that it overrides compilerArgs. The pom change can either be done as a productization patch or a change on your side Horia (and you give us a new tag). (In reply to Alex Szczuczko from comment #4) > We've found that maven now tries to compile the test for modeshape-client > with a source/target of 1.6, which seems to defy the definition of 1.7 in > the plugin execution. Obviously, since try-with-resources syntax is being > used in the test, javac fails to compile the test. > I'm not sure I follow: ModeShape's build uses the maven.compiler.target/source values coming from the IP-BOM which is 1.6 (it never overwrites these values) Test wise, with the exception of the modeshape-client module, the same properties should be used (meaning JDK 6 compatibility). modeshape-client uses JDK7 (and relies on JDK7 features which are no available in JDK6). Therefore, I've explicitly made the change in this commit https://github.com/jboss-integration/modeshape/commit/c6bf9d9dcf7f3a816cb43e99eb799135544a23b3 so that only the maven-compiler testSource and testTarget properties are changed to 1.7. Note that this does not have any effect on the maven.compiler.target/source properties. So, considering that: * tests are not distributed to customers * the JDK version for compiling main artifacts is 1.6 I don't see any reason why the tests can't use Java 7. If the build is ran with Java 7 and above, everything should work as expected (this is what I've tested locally) If the build is ran with Java 6, then using -Dmaven.test.skip=true instead of -DskipTests should make sure that the testCompile phase is not executed at all which should also work Note that the tag handoff report mentions Java 7 being required, not 6. >Normally I would just disable the test, but it seems that you really want this one to run Horia? I would like to run this locally because it validates that the rest script(s) are working fine. >Our options, assuming keeping the test, are to either alter the test such that it uses 1.6 syntax, or to change the pom such that it overrides compilerArgs. The pom change can either be done as a productization patch or a change on your side Horia (and you give us a new tag). Using 1.6 syntax is not possible, since it requires specific API changes around the JDK's java.lang.ProcessBuilder present only in 7 and above. As I tried to explain above, I don't really get why Maven would not be honoring the testSource and testTarget compiler properties; but in any case I would prefer disabling this test via a productizaton patch rather than removing it from the codebase altogether In maven debug mode we discovered that for the [maven-compiler-plugin:3.1:testCompile (test-compile) @ modeshape-client] execution:
The configuration values were (...'s added by me for brevity):
basedir = /mnt/.../build/modeshape-client
buildDirectory = /mnt/.../modeshape-client/target
classpathElements = [ ... ]
compileSourceRoots = [/mnt/.../modeshape-client/src/test/java]
compilerArguments = {source=1.6, target=1.6}
compilerId = javac
debug = true
encoding = UTF-8
failOnError = true
forceJavacCompilerUse = false
fork = false
generatedTestSourcesDirectory = /mnt/.../modeshape-client/target/generated-test-sources/test-annotations
mojoExecution = org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile {execution: test-compile}
optimize = false
outputDirectory = /mnt/.../modeshape-client/target/test-classes
showDeprecation = false
showWarnings = false
skipMultiThreadWarning = false
source = 1.6
staleMillis = 0
target = 1.6
testSource = 1.7
testTarget = 1.7
useIncrementalCompilation = true
verbose = false
mavenSession = org.apache.maven.execution.MavenSession@3da0fca3
session = org.apache.maven.execution.MavenSession@3da0fca3
Which resulted in a javac command line of:
javac -d ... -classpath ... -sourcepath ... -s ... -g -nowarn -target 1.7 -source 1.7 -encoding UTF-8 -source 1.6 -target 1.6
We initially thought the extra source/target on the end might be set by the source/target configuration values. However, when we tried setting them to 1.7 as well, that didn't change the javac command line. The compilerArguments setting is the only other place 1.6 occurs in the configuration.
So, the values for testSource/testTarget were being received and applied, but the compilerArguments setting (which allows arbitrary String=String definition of arguments) has been defined elsewhere to be "-source 1.6 -target 1.6", and since it gets added last to the command line, the values of testSource/testTarget are overridden.
Tracing back through the multiple levels of parents, I think compilerArguments is set by jboss-parent:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${version.compiler.plugin}</version>
<configuration>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<compilerArguments>
<source>${maven.compiler.argument.source}</source>
<target>${maven.compiler.argument.target}</target>
</compilerArguments>
</configuration>
Note that:
maven.compiler.argument.source
maven.compiler.argument.target
are not identical to:
maven.compiler.source
maven.compiler.target
They are not standard maven-compiler-plugin properties. In jboss-parent 16 (used by IPBOM), both properties are set to 1.7. In jboss-parent 14.0.0.redhat-1 (used by jboss-as-parent), both properties are set to 1.6.
So, something happens in the alignment phase, and we end up with compilerArguments set to 1.6, which overrides anything. Possibly this was by design, or maybe whenever jboss-parent was written the discrete source/target configuration values didn't exist?
Either way, I think we will have to keep a patch for this in prod. I think that patch can just change the pom (re-define compilerArguments for test-compile @ modeshape-client), so that the test will keep functioning.
That's highly "interesting" in the sense that all these params manage to confuse the compiler.
Looking locally at
jboss-parent(19)-jboss-integration-platform-parent(6.0.0.Final)-modeshape-parent
the values are:
jboss-parent(19)
----------------
<!-- maven-compiler-plugin -->
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.argument.target>${maven.compiler.target}</maven.compiler.argument.target>
<maven.compiler.argument.source>${maven.compiler.source}</maven.compiler.argument.source>
jboss-integration-platform-parent(6.0.0.Final)
-----------------------------------------------
<!-- Override Java source/target to be 1.6 -->
<maven.compiler.target>1.6</maven.compiler.target>
<maven.compiler.source>1.6</maven.compiler.source>
Actually I think I might like to take a look locally at this some more, check if I can force the compiler to correctly use the source and target
@Alex if you're ok with waiting until tomorrow, I can update this issue and perhaps submit a new tag if I can fix this in the ModeShape build
submitted 3.8.x-prod-ip6.3-update4_4 which is the last-ditch effort at this: I've overwritten the entire source and target but only of the default-testCompile execution and the module is not using the testSource and testTarget attributes anymore Hopefully this fixes the duplicate -source -target arguments from above not to mention test compiling should be skipped altogether when running -DskipTests Acknowledged this last patch. Starting build. |
Description of problem: DV Server can't be started on JDK 1.6 after applying the patch. The message: 12:25:00,814 INFO [org.jboss.as] (MSC service thread 1-6) JBAS015899: JBoss Red Hat JBoss Data Virtualization 6.3.4 (AS 7.5.12.Final-redhat-1) starting 12:25:01,488 WARN [org.jboss.modules] (ServerService Thread Pool -- 18) Failed to define class org.modeshape.jboss.subsystem.ModeShapeExtension in Module "org.modeshape:main" from local module loader @3d9360e2 (finder: local module finder @16bdb503 (roots: w:\workspace\jdv-6.3.x-smoke-test\6eb0e882\work\modules,w:\workspace\jdv-6.3.x-smoke-test\6eb0e882\work\modules\system\layers\dv,w:\workspace\jdv-6.3.x-smoke-test\6eb0e882\work\modules\system\layers\base\.overlays\layer-base-jboss-eap-6.4.12.CP,w:\workspace\jdv-6.3.x-smoke-test\6eb0e882\work\modules\system\layers\base)): java.lang.UnsupportedClassVersionError: org/modeshape/jboss/subsystem/ModeShapeExtension : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.6.0_45] at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) [rt.jar:1.6.0_45] at java.lang.ClassLoader.defineClass(ClassLoader.java:615) [rt.jar:1.6.0_45] at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:447) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:414) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.7.Final-redhat-1] at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_45] at java.lang.Class.forName(Class.java:249) [rt.jar:1.6.0_45] at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:346) [rt.jar:1.6.0_45] at java.util.ServiceLoader$1.next(ServiceLoader.java:428) [rt.jar:1.6.0_45] at org.jboss.as.controller.parsing.ExtensionXml.loadModule(ExtensionXml.java:179) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.parsing.ExtensionXml.access$000(ExtensionXml.java:68) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.parsing.ExtensionXml$1.call(ExtensionXml.java:126) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.parsing.ExtensionXml$1.call(ExtensionXml.java:123) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [rt.jar:1.6.0_45] at java.util.concurrent.FutureTask.run(FutureTask.java:138) [rt.jar:1.6.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [rt.jar:1.6.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [rt.jar:1.6.0_45] at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45] at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.2.Final-redhat-1.jar:2.1.2.Final-redhat-1] 12:25:01,510 ERROR [org.jboss.as.server] (Controller Boot Thread) JBAS015956: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: JBAS014676: Failed to parse configuration at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:141) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.server.ServerService.boot(ServerService.java:338) [jboss-as-server-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:263) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45] Caused by: javax.xml.stream.XMLStreamException: JBAS014674: Failed to load module org.modeshape at org.jboss.as.controller.parsing.ExtensionXml.parseExtensions(ExtensionXml.java:154) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.server.parsing.StandaloneXml.readServerElement_1_4(StandaloneXml.java:435) [jboss-as-server-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:145) [jboss-as-server-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:107) [jboss-as-server-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110) [staxmapper-1.1.0.Final-redhat-3.jar:1.1.0.Final-redhat-3] at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69) [staxmapper-1.1.0.Final-redhat-3.jar:1.1.0.Final-redhat-3] at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:133) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] ... 3 more Caused by: java.util.concurrent.ExecutionException: java.lang.UnsupportedClassVersionError: org/modeshape/jboss/subsystem/ModeShapeExtension : Unsupported major.minor version 51.0 at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) [rt.jar:1.6.0_45] at java.util.concurrent.FutureTask.get(FutureTask.java:83) [rt.jar:1.6.0_45] at org.jboss.as.controller.parsing.ExtensionXml.parseExtensions(ExtensionXml.java:146) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] ... 9 more Caused by: java.lang.UnsupportedClassVersionError: org/modeshape/jboss/subsystem/ModeShapeExtension : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.6.0_45] at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) [rt.jar:1.6.0_45] at java.lang.ClassLoader.defineClass(ClassLoader.java:615) [rt.jar:1.6.0_45] at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:361) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:277) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:92) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.Module.loadModuleClass(Module.java:568) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:205) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:447) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:414) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.7.Final-redhat-1] at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.7.Final-redhat-1] at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_45] at java.lang.Class.forName(Class.java:249) [rt.jar:1.6.0_45] at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:346) [rt.jar:1.6.0_45] at java.util.ServiceLoader$1.next(ServiceLoader.java:428) [rt.jar:1.6.0_45] at org.jboss.as.controller.parsing.ExtensionXml.loadModule(ExtensionXml.java:179) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.parsing.ExtensionXml.access$000(ExtensionXml.java:68) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.parsing.ExtensionXml$1.call(ExtensionXml.java:126) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at org.jboss.as.controller.parsing.ExtensionXml$1.call(ExtensionXml.java:123) [jboss-as-controller-7.5.12.Final-redhat-1.jar:7.5.12.Final-redhat-1] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [rt.jar:1.6.0_45] at java.util.concurrent.FutureTask.run(FutureTask.java:138) [rt.jar:1.6.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [rt.jar:1.6.0_45] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [rt.jar:1.6.0_45] at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45] at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.2.Final-redhat-1.jar:2.1.2.Final-redhat-1]