Наистина ще съм благодарен, ако ми помогнете. Пренаписвам прост стартер на Minecraft от Java към Go. Всичко е добро, с изключение на едно нещо. Имам функция за стартиране, която се изпълнява с помощта на os.Exec тази команда:
java -Xincgc -Xmx1024M -Djava.library.path="/minecraft/bin/natives/" -cp "/minecraft/bin/*" -Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true net.minecraft.launchwrapper.Launch --username user --session session --version 1.6.4 --gameDir "/minecraft" --assetsDir "/minecraft" --tweakClass cpw.mods.fml.common.launcher.FMLTweaker
Всичко е наред, изпълнявайки това чрез bash или cmd, но когато се изпълнява с функция Go, тя връща следното:
Could not find or load main class net.minecraft.launchwrapper.Launch
Мисля, че os.exec(Command) не може правилно да интерпретира тази част от командата:
-cp "/minecraft/bin/*"
Може би това е защото цитирах низ "/minecraft/bin/*" с функцията strconv.Quote() или поради звездичка. Наистина не знам какво става. А, между другото, командата os.exec е изпълнена, но е правилна (прочетох я в stdout с fmt за целите на отстраняването на грешки).
програма:
func start(login string, session string, ram string) {
//start game
app := "java"
arg0 := "-Xincgc"
arg1 := "-Xmx" + ram + "M"
arg2 := "-Djava.library.path=" + strconv.Quote(filepath.FromSlash(client+"bin/natives/"))
arg3 := "-cp"
arg4 := strconv.Quote(filepath.FromSlash(client + "bin/*"))
arg5 := "-Dfml.ignoreInvalidMinecraftCertificates=true"
arg6 := "-Dfml.ignorePatchDiscrepancies=true"
arg7 := "net.minecraft.launchwrapper.Launch"
arg8 := "--username"
//arg9 is login
arg10 := "--session"
//arg11 is session
arg12 := "--version 1.6.4"
arg13 := "--gameDir"
arg14 := strconv.Quote(filepath.FromSlash(client))
arg15 := "--assetsDir"
arg16 := strconv.Quote(filepath.FromSlash(client + "assets"))
arg17 := "--tweakClass cpw.mods.fml.common.launcher.FMLTweaker"
cmd := exec.Command(app, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, login, arg10, session, arg12, arg13, arg14, arg15, arg16, arg17)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()
fmt.Println(app, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, login, arg10, session, arg12, arg13, arg14, arg15, arg16, arg17)
}
minecraft
директория наистина е под основната директория (/
)? Не е във вашата домашна директория? - person RealSkeptic   schedule 17.12.2014arg12 := "--version 1.6.4"
ставаarg12 := "--version"
иarg13 := "1.6.4"
- person topskip   schedule 17.12.2014