mill icon indicating copy to clipboard operation
mill copied to clipboard

./Mill not working with m1 Mac (Failed to connect to server error)

Open GabeNicholson opened this issue 1 year ago • 2 comments

I am trying to work with a build written in mill but whenever I run any mill command it fails. And there is always an Exception in thread "main" java.lang.Exception: Failed to connect to server error. Here is the output of my version.

Mill Build Tool version 0.11.7 Java version: 21.0.2, vendor: Homebrew, runtime: /opt/homebrew/Cellar/openjdk/21.0.2/libexec/openjdk.jdk/Contents/Home Default locale: en_CA, platform encoding: UTF-8 OS name: "Mac OS X", version: 14.2.1, arch: aarch64

Error code:

./mill
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/gabriel/Library/Caches/JNA/temp/jna14575276343731702839.tmp: dlopen(/Users/gabriel/Library/Caches/JNA/temp/jna14575276343731702839.tmp, 0x0001): tried: '/Users/gabriel/Library/Caches/JNA/temp/jna14575276343731702839.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/gabriel/Library/Caches/JNA/temp/jna14575276343731702839.tmp' (no such file), '/Users/gabriel/Library/Caches/JNA/temp/jna14575276343731702839.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64'))
	at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
	at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2394)
	at java.base/java.lang.Runtime.load0(Runtime.java:755)
	at java.base/java.lang.System.load(System.java:1957)
	at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1024)
	at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:999)
	at com.sun.jna.Native.<clinit>(Native.java:191)
	at org.scalasbt.ipcsocket.UnixDomainSocketLibrary.<clinit>(UnixDomainSocketLibrary.java:123)
	at org.scalasbt.ipcsocket.UnixDomainServerSocket.<init>(UnixDomainServerSocket.java:103)
	at org.scalasbt.ipcsocket.UnixDomainServerSocket.<init>(UnixDomainServerSocket.java:93)
	at mill.main.Server.$anonfun$run$2(MillServerMain.scala:91)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at mill.main.Server$.lockBlock(MillServerMain.scala:203)
	at mill.main.Server.$anonfun$run$1(MillServerMain.scala:84)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at mill.main.Server$.tryLockBlock(MillServerMain.scala:210)
	at mill.main.Server.run(MillServerMain.scala:81)
	at mill.main.MillServerMain$.main(MillServerMain.scala:45)
	at mill.main.MillServerMain.main(MillServerMain.scala)
Exception in thread "main" java.lang.Exception: Failed to connect to server
	at mill.main.client.MillClientMain.run(MillClientMain.java:200)
	at mill.main.client.MillClientMain.main0(MillClientMain.java:129)
	at mill.main.client.MillClientMain.main(MillClientMain.java:82)

GabeNicholson avatar Feb 17 '24 21:02 GabeNicholson

Thanks for the report. I think we have other users working on m1 Macs, so it might be related to the Java version, which is 21. Maybe, other Mac users could verify and reproduce, that this is the issue?

lefou avatar Feb 18 '24 09:02 lefou

@GabeNicholson I'm on M2, but would expect similar behaviour?

simon@Simons-Mac-mini indigo2 % mill -v
Mill Build Tool version 0.11.7
Java version: 21.0.2, vendor: Homebrew, runtime: /opt/homebrew/Cellar/openjdk/21.0.2/libexec/openjdk.jdk/Contents/Home
Default locale: en_GB, platform encoding: UTF-8
OS name: "Mac OS X", version: 14.2.1, arch: aarch64

Any chance there is shell configuration tripping you up?

Quafadas avatar Feb 28 '24 16:02 Quafadas

I have M1 Macbook, dont have any issue when i run mill commands

╰─$ ./mill --version 
Mill Build Tool version 0.11.7
Java version: 21, vendor: GraalVM Community, runtime: /Users/UserName/.sdkman/candidates/java/21-graalce
Default locale: en_DE, platform encoding: UTF-8
OS name: "Mac OS X", version: 14.1.1, arch: aarch64

ddduong avatar Mar 20 '24 16:03 ddduong

Thank you all for your input! Looks like you all already use Java 21 without issues (except the OP). I think there must be some other issue.

I'm closing this, as I don't see any action to be taken. @GabeNicholson if you still experiencing this issue, please provide more details. How do you have installed mill? Does it work with the --no-server option? Do other Java apps work for you?

lefou avatar Mar 20 '24 17:03 lefou

I have the same issue too, I am currently using m1 mac, and i tried jdk17 and jdk21, but both not work for me.

~/IdeaProject/example-3 5s                                       09:18:51
❯ export JAVA_HOME=`/usr/libexec/java_home -v 17`
~/IdeaProject/example-3                                          09:19:03
❯ ./mill -v
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/roiocam/Library/Caches/JNA/temp/jna12902990016562179596.tmp: dlopen(/Users/roiocam/Library/Caches/JNA/temp/jna12902990016562179596.tmp, 0x0001): tried: '/Users/roiocam/Library/Caches/JNA/temp/jna12902990016562179596.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/roiocam/Library/Caches/JNA/temp/jna12902990016562179596.tmp' (no such file), '/Users/roiocam/Library/Caches/JNA/temp/jna12902990016562179596.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64'))
	at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
	at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)
	at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2394)

--no-server option is still unable to fix it.

❯ ./mill --no-server foo.compile
Compiling /Users/roiocam/IdeaProject/example-3/build.sc
scala.reflect.internal.FatalError:
  bad constant pool index: 0 at pos: 48461
     while compiling: <no file>
        during phase: globalPhase=<no phase>, enteringPhase=<some phase>
     library version: version 2.13.2
    compiler version: version 2.13.2
  reconstructed args: -nowarn -Yresolve-term-conflict:object

  last tree to typer: EmptyTree
       tree position: <unknown>
            tree tpe: <notype>
              symbol: null
           call site: <none> in <none>

== Source file context for tree position ==


  scala.reflect.internal.Reporting.abort(Reporting.scala:69)
  scala.reflect.internal.Reporting.abort$(Reporting.scala:65)
  scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:28)
  scala.tools.nsc.symtab.classfile.ClassfileParser$ConstantPool.errorBadIndex(ClassfileParser.scala:394)
  scala.tools.nsc.symtab.classfile.ClassfileParser$ConstantPool.getExternalName(ClassfileParser.scala:249)
  scala.tools.nsc.symtab.classfile.ClassfileParser.readParamNames$1(ClassfileParser.scala:841)
  scala.tools.nsc.symtab.classfile.ClassfileParser.parseAttribute$1(ClassfileParser.scala:847)
  scala.tools.nsc.symtab.classfile.ClassfileParser.$anonfun$parseAttributes$6(ClassfileParser.scala:917)
  scala.tools.nsc.symtab.classfile.ClassfileParser.parseAttributes(ClassfileParser.scala:917)
  scala.tools.nsc.symtab.classfile.ClassfileParser.parseMethod(ClassfileParser.scala:621)
  scala.tools.nsc.symtab.classfile.ClassfileParser.parseClass(ClassfileParser.scala:534)
  scala.tools.nsc.symtab.classfile.ClassfileParser.$anonfun$parse$2(ClassfileParser.scala:161)
  scala.tools.nsc.symtab.classfile.ClassfileParser.$anonfun$parse$1(ClassfileParser.scala:147)
  scala.tools.nsc.symtab.classfile.ClassfileParser.parse(ClassfileParser.scala:130)
  scala.tools.nsc.symtab.SymbolLoaders$ClassfileLoader.doComplete(SymbolLoaders.scala:331)
  scala.tools.nsc.symtab.SymbolLoaders$SymbolLoader.$anonfun$complete$2(SymbolLoaders.scala:238)
  scala.tools.nsc.symtab.SymbolLoaders$SymbolLoader.complete(SymbolLoaders.scala:236)
  scala.reflect.internal.Symbols$Symbol.completeInfo(Symbols.scala:1541)
  scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1513)
  scala.reflect.internal.Definitions.scala$reflect$internal$Definitions$$enterNewMethod(Definitions.scala:48)
  scala.reflect.internal.Definitions$DefinitionsClass.String_$plus$lzycompute(Definitions.scala:1221)
  scala.reflect.internal.Definitions$DefinitionsClass.String_$plus(Definitions.scala:1221)
  scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreMethods$lzycompute(Definitions.scala:1518)
  scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreMethods(Definitions.scala:1500)
  scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode$lzycompute(Definitions.scala:1531)
  scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1531)
  scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1587)
  scala.tools.nsc.Global$Run.<init>(Global.scala:1204)
  ammonite.interp.Compiler$$anon$1.<init>(Compiler.scala:274)
  ammonite.interp.Compiler$.apply(Compiler.scala:142)
  ammonite.interp.CompilerLifecycleManager.init(CompilerLifecycleManager.scala:89)
  ammonite.interp.CompilerLifecycleManager.preprocess(CompilerLifecycleManager.scala:57)
  ammonite.interp.Interpreter.compileRunBlock$1(Interpreter.scala:511)
  ammonite.interp.Interpreter.$anonfun$processAllScriptBlocks$15(Interpreter.scala:572)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  ammonite.interp.Interpreter.$anonfun$processAllScriptBlocks$14(Interpreter.scala:569)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  ammonite.interp.Interpreter.$anonfun$processAllScriptBlocks$12(Interpreter.scala:566)
  scala.Option.getOrElse(Option.scala:201)
  ammonite.interp.Interpreter.loop$1(Interpreter.scala:566)
  ammonite.interp.Interpreter.processAllScriptBlocks(Interpreter.scala:604)
  ammonite.interp.Interpreter.$anonfun$processModule$6(Interpreter.scala:399)
  ammonite.util.Catching.flatMap(Res.scala:115)
  ammonite.interp.Interpreter.$anonfun$processModule$5(Interpreter.scala:390)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  ammonite.interp.Interpreter.processModule(Interpreter.scala:380)
  mill.main.RunScript$.$anonfun$evaluateRootModule$1(RunScript.scala:93)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  mill.main.RunScript$.evaluateRootModule(RunScript.scala:86)
  mill.main.RunScript$.runScript(RunScript.scala:48)
  mill.main.MainRunner.$anonfun$runScript$1(MainRunner.scala:115)
  mill.main.MainRunner.watchLoop2(MainRunner.scala:64)
  mill.main.MainRunner.runScript(MainRunner.scala:90)
  mill.MillMain$.main0(MillMain.scala:269)
  mill.MillMain$.main(MillMain.scala:25)
  mill.MillMain.main(MillMain.scala)

Roiocam avatar Jun 13 '24 01:06 Roiocam

I guess because I am using a very old version... the latest 0.11.7 works on my local.

Roiocam avatar Jun 13 '24 01:06 Roiocam

In case you need to use an older version of Mill, you should always be able to fall back to --no-server or --interactive options, to switch Mill into a no-server mode.

lefou avatar Jun 13 '24 14:06 lefou