Переполнение стека в панели запуска sbt (Версия 1. *) - PullRequest
2 голосов
/ 29 января 2020

Я хочу использовать sbt-launcher, чтобы получить SBT и запустить его. У меня следующее sbt.boot.properties:

[scala]
  version: ${sbt.scala.version-auto}

[app]
  org: ${sbt.organization-org.scala-sbt}
  name: sbt
  version: ${sbt.version-read(sbt.version)[1.3.7]}
  class: ${sbt.main.class-sbt.xMain}
  components: xsbti,extra
  cross-versioned: ${sbt.cross.versioned-false}
  resources: ${sbt.extraClasspath-}

[repositories]
  local
  maven-central: http://artifactory.corp.com/artifactory/joined-maven-releases
  typesafe-ivy-releases: http://artifactory.corp.com/artifactory/joined-ivy-releases, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]

[boot]
  directory: ${sbt.boot.directory-${sbt.global.base-${user.home}/.sbt}/boot/}

[ivy]
  ivy-home: ${sbt.ivy.home-${user.home}/.ivy2/}
  checksums: ${sbt.checksums-sha1,md5}
  override-build-repos: ${sbt.override.build.repos-false}
  repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories}

Если я установлю SBT vertions на 0.13.18, он будет работать нормально: version: ${sbt.version-read(sbt.version)[0.13.18]}, однако в последней версии я получаю ошибку stackOverflow:

[info] [launcher] getting org.scala-sbt sbt 1.3.7  (this may take some time)...
java.lang.StackOverflowError
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader$3.next(Unknown Source)
        at java.net.URLClassLoader$3.hasMoreElements(Unknown Source)
        at sun.misc.CompoundEnumeration.next(Unknown Source)
        at sun.misc.CompoundEnumeration.hasMoreElements(Unknown Source)
        at sun.misc.CompoundEnumeration.next(Unknown Source)
        at sun.misc.CompoundEnumeration.hasMoreElements(Unknown Source)
        at java.util.ServiceLoader$LazyIterator.hasNextService(Unknown Source)
        at java.util.ServiceLoader$LazyIterator.hasNext(Unknown Source)
        at java.util.ServiceLoader$1.hasNext(Unknown Source)
        at javax.xml.parsers.FactoryFinder$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.xml.parsers.FactoryFinder.findServiceProvider(Unknown Source)
        at javax.xml.parsers.FactoryFinder.find(Unknown Source)
        at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
        at org.apache.ivy.util.XMLHelper.getDocBuilder(XMLHelper.java:213)
        at org.apache.ivy.util.XMLHelper.parseToDom(XMLHelper.java:207)
        at org.apache.ivy.plugins.parser.m2.PomReader.<init>(PomReader.java:95)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:122)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:112)
        at org.apache.ivy.core.cache.ModuleDescriptorProvider.provideModule$6172736d(ModuleDescriptorProvider.java:716)
        at org.apache.ivy.core.cache.ModuleDescriptorMemoryCache.getStale(ModuleDescriptorMemoryCache.java:68)
        at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.cacheModuleDescriptor(DefaultRepositoryCacheManager.java:1195)
        at org.apache.ivy.plugins.resolver.BasicResolver.parse(BasicResolver.java:536)
        at org.apache.ivy.plugins.resolver.BasicResolver.getDependency(BasicResolver.java:271)
        at org.apache.ivy.plugins.resolver.IBiblioResolver.getDependency(IBiblioResolver.java:538)
        at org.apache.ivy.plugins.resolver.ChainResolver.getDependency(ChainResolver.java:104)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseOtherPom(PomModuleDescriptorParser.java:382)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:143)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:112)
        at org.apache.ivy.core.cache.ModuleDescriptorProvider.provideModule$6172736d(ModuleDescriptorProvider.java:716)
        at org.apache.ivy.core.cache.ModuleDescriptorMemoryCache.getStale(ModuleDescriptorMemoryCache.java:68)

Почему именно это происходит, как я могу отладить его наилучшим образом? Когда я пытаюсь получить SBT 1.3.7 с помощью maven, он работает нормально, поэтому он доступен в репозитории.

Я запускаю sbt-launcher следующим образом:

set SCRIPT_DIR=%~dp0
java -Xmx8G -Xss2G -jar "%SCRIPT_DIR%launcher-1.1.3.jar" %*

Добавление:

Я обнаружил, что последняя версия, с которой он работает, - это 1.2.3, когда я изменяю его на 1.2.4, он выдает следующую трассировку стека до тех пор, пока не возникнет ошибка StackOverflow:

at org.apache.ivy.plugins.resolver.BasicResolver.parse(BasicResolver.java:536)
        at org.apache.ivy.plugins.resolver.BasicResolver.getDependency(BasicResolver.java:271)
        at org.apache.ivy.plugins.resolver.IBiblioResolver.getDependency(IBiblioResolver.java:538)
        at org.apache.ivy.plugins.resolver.ChainResolver.getDependency(ChainResolver.java:104)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseOtherPom(PomModuleDescriptorParser.java:382)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:143)
        at org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:112)
        at org.apache.ivy.core.cache.ModuleDescriptorProvider.provideModule$6172736d(ModuleDescriptorProvider.java:716)
        at org.apache.ivy.core.cache.ModuleDescriptorMemoryCache.getStale(ModuleDescriptorMemoryCache.java:68)
        at org.apache.ivy.core.cache.DefaultRepositoryCacheManager.cacheModuleDescriptor(DefaultRepositoryCacheManager.java:1195)
...