Maven is now part of Guix, yeah! I gave it a try and found some bugs which I post collectively here. I don't know yet where exactly they come from and if they are trivial or not to fix. So if you think they should better go each into a separate bug report, please separate them. For reference, I'm on Ubuntu with: $> guix pull --list-generations | tail --lines=6 guile: warning: failed to install locale warning: failed to install locale: Invalid argument Generation 2 Jun 22 2018 21:53:40 (current) guix 18ab54d repository URL: https://git.savannah.gnu.org/git/guix.git commit: 18ab54d4a2aaf932b14e69c30650c1d2c4db33c7 1) The following propagated inputs are used from bash scripts and are missing: which, coreutils $> guix environment -C --ad-hoc maven icedtea@3:jdk -- mvn /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 46: uname: command not found /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 56: ls: command not found /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 57: expr: command not found /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 58: expr: command not found /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 61: dirname: command not found /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 67: dirname: command not found /gnu/store/sk23y72hma8x6n5ch6xqgql1q93dg7if-profile/bin/mvn: line 94: which: command not found The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program NB: JAVA_HOME should point to a JDK not a JRE 2) There is something wrong with the version output: $> guix environment -C --ad-hoc maven icedtea@3:jdk coreutils which -- mvn -version null ${distributionShortName} home: /gnu/store/a19m087lz9fg4c2aplvdlm1y2iiibjdb-maven-3.5.3 Java version: 1.8.0_161, vendor: Oracle Corporation Java home: /gnu/store/7dah2ha88f4sxakpgdlbfn6mvs842j6w-icedtea-3.7.0-jdk/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "4.4.0-128-generic", arch: "amd64", family: "unix" Compare this to my "native" Ubuntu maven: $> /usr/bin/mvn -version Apache Maven 3.3.9 Maven home: /usr/share/maven Java version: 1.8.0_161, vendor: Oracle Corporation Java home: /gnu/store/8yfdmh7hsnfq87ddcyjz5nxk5f208pmc-icedtea-3.7.0-jdk/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "4.4.0-128-generic", arch: "amd64", family: "unix" 3) The -version part is already handled by Java code. So I tried to debug Maven remotely from Eclipse, but it failed with a message saying that debug symbols were missing. I want to verify this again, but could this be a problem of the ant-build-system removing debug symbols? 4) I cannot use icedteaX (x \in {1,2}) (i.e. X=2 means JDK 1.7) with Maven. Is this a bug or a fact? $> guix environment -C --ad-hoc maven icedtea@2:jdk coreutils which -- mvn -version Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:803) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:442) at java.net.URLClassLoader.access$100(URLClassLoader.java:64) at java.net.URLClassLoader$1.run(URLClassLoader.java:354) at java.net.URLClassLoader$1.run(URLClassLoader.java:348) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:347) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:312) at java.lang.ClassLoader.loadClass(ClassLoader.java:412) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(Unknown Source) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(Unknown Source) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Unknown Source) Version 52.0 means Java 1.8. I think this is because we are now building all Java packages with ant-build-system with Icedtea@3 and letting it output Java8 code. Right? If this is the case anyway, we don't have any chance to choose a JDK to run maven with (if we choose from Guix, not from other locations). Should we then add icedtea@3 as a propagated input to maven? Then a user can directly use Maven and doesn't have to think of installing a JDK first. Mhm, maybe too strict and too heavy in size? From now on I'm in a container with a fresh .m2 directory, assuming "mvn-home" is an empty directory: guix environment -C -N --share=mvn-home/=/home/bjoern/.m2 --ad-hoc maven coreutils which icedtea@3:jdk 5) Maven complains about the logger output: $ENV> mvn clean install [WARNING] The SLF4J binding actually used is not supported by Maven: org.slf4j.impl.SimpleLoggerFactory [WARNING] Maven supported bindings are: [INFO] Scanning for projects... [...] When looking at the package definition of maven, I find in the inputs: ;; TODO: replace with maven-slf4j-provider ("java-slf4j-simple" ,java-slf4j-simple))) Is this comment related to the WARNING? Will it go away with maven-slf4j-provider? 6) Maven does not compile Java 1.8 code. To reproduce this, build any Maven project that has either source or target language version set to 1.8: 1.8 1.8 As our Maven mostly works, you can just use: $ENV> mvn archetype:generate to create a new Maven project. Edit the pom.xml to set the versions. Then [I head some problems with tests, so skipping them here]: $ENV> mvn clean install -Dmvn.tests.skip=true -X -e [..] [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.171 s [INFO] Finished at: 2018-06-22T22:17:21Z [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project tst2: Fatal error compiling: invalid source release: 1.8 -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project tst2: Fatal error compiling at org.apache.maven.lifecycle.internal.MojoExecutor.execute(Unknown Source) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(Unknown Source) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(Unknown Source) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(Unknown Source) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(Unknown Source) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(Unknown Source) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Unknown Source) at org.apache.maven.DefaultMaven.doExecute(Unknown Source) at org.apache.maven.DefaultMaven.doExecute(Unknown Source) at org.apache.maven.DefaultMaven.execute(Unknown Source) at org.apache.maven.cli.MavenCli.execute(Unknown Source) at org.apache.maven.cli.MavenCli.doMain(Unknown Source) at org.apache.maven.cli.MavenCli.main(Unknown Source) 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 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Unknown Source) Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1086) at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:168) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Unknown Source) ... 21 more Caused by: org.codehaus.plexus.compiler.CompilerException: invalid source release: 1.8 at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:173) at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:174) at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1075) ... 23 more Caused by: java.lang.IllegalArgumentException: invalid source release: 1.8 at com.sun.tools.javac.main.RecognizedOptions$GrumpyHelper.error(RecognizedOptions.java:88) at com.sun.tools.javac.main.RecognizedOptions$9.process(RecognizedOptions.java:348) at com.sun.tools.javac.api.JavacTool.processOptions(JavacTool.java:242) at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:199) at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68) at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:125) ... 25 more [ERROR] [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 7) I have some trouble executing the tests. This is indeterministic (!), sometimes is is successful, sometimes I get an error: $ENV> mvn clean install -X -e -B>stacktrace.log 2>&1; echo $? [..] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running de.xxx.AppTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.981 s [INFO] Finished at: 2018-06-22T22:27:49Z [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project tst2: There are test failures. [ERROR] [ERROR] Please refer to /home/bjoern/x/z/tst2/target/surefire-reports for the individual test results. [ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream. [ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was /bin/sh -c cd /home/bjoern/x/z/tst2 && /gnu/store/7dah2ha88f4sxakpgdlbfn6mvs842j6w-icedtea-3.7.0-jdk/jre/bin/java -jar /home/bjoern/x/z/tst2/target/surefire/surefirebooter4025948542605868366.jar /home/bjoern/x/z/tst2/target/surefire 2018-06-22T22-27-48_542-jvmRun1 surefire4165566371678934740tmp surefire_02394075698289798736tmp [ERROR] Error occurred in starting fork, check output in log [ERROR] Process Exit Code: 1 [ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called? [ERROR] Command was /bin/sh -c cd /home/bjoern/x/z/tst2 && /gnu/store/7dah2ha88f4sxakpgdlbfn6mvs842j6w-icedtea-3.7.0-jdk/jre/bin/java -jar /home/bjoern/x/z/tst2/target/surefire/surefirebooter4025948542605868366.jar /home/bjoern/x/z/tst2/target/surefire 2018-06-22T22-27-48_542-jvmRun1 surefire4165566371678934740tmp surefire_02394075698289798736tmp [ERROR] Error occurred in starting fork, check output in log [ERROR] Process Exit Code: 1 [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:686) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:535) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:280) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1124) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:954) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:832) [ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(Unknown Source) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(Unknown Source) [ERROR] at org.apache.maven.DefaultMaven.doExecute(Unknown Source) [ERROR] at org.apache.maven.DefaultMaven.doExecute(Unknown Source) [ERROR] at org.apache.maven.DefaultMaven.execute(Unknown Source) [ERROR] at org.apache.maven.cli.MavenCli.execute(Unknown Source) [ERROR] at org.apache.maven.cli.MavenCli.doMain(Unknown Source) [ERROR] at org.apache.maven.cli.MavenCli.main(Unknown Source) [ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ERROR] at java.lang.reflect.Method.invoke(Method.java:498) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Unknown Source) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Unknown Source) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Unknown Source) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Unknown Source) [ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project tst2: There are test failures. [..] 8) BTW maven is NOT creating a reproducible output. That's important if you want to use it to as a build tool for Guix: $ENV> jar tvvf ~/.m2/repository/de/xxx/tst2/1.0-SNAPSHOT/tst2-1.0-SNAPSHOT.jar 110 Fri Jun 22 22:29:26 GMT 2018 META-INF/MANIFEST.MF 0 Fri Jun 22 22:29:26 GMT 2018 META-INF/ That's it for now. Björn