मुझे अपने मावेन प्रोजेक्ट में Scala-maven-plugin से संबंधित एक बग मिला। मेरे पास सुविधाओं का एक बहुत लंबा अनुक्रम है (मशीन सीखने के उद्देश्यों के लिए) मैं हाथ से कोडित (74 तत्व)।

मैंने अनुक्रम में एक तत्व जोड़ा है और यह अब संकलित नहीं होता है। अगर मैं इस क्रम के किसी तत्व पर टिप्पणी करता हूं, तो तत्वों की संख्या घट जाती है और यह संकलित हो जाता है।

अधिक जानकारी के लिए, मेरे संकलन का अंतिम आउटपुट यहां दिया गया है:

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (default) on project SecretProject: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 240 (Exit value: 240) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[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

साथ ही स्टैकट्रेस की शुरुआत:

[INFO] Compiling 13 source files to /home/belka/Bureau/SecretProject/target/classes at 1513759339071
[ERROR] error: java.lang.StackOverflowError
[INFO]  at scala.reflect.internal.TreeInfo.isSelfConstrCall(TreeInfo.scala:296)
[INFO]  at scala.reflect.internal.TreeInfo.isSelfOrSuperConstrCall(TreeInfo.scala:344)
[INFO]  at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1701)
[INFO]  at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
[INFO]  at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:457)
[INFO]  at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:352)
[INFO]  at scala.reflect.internal.Trees$class.itransform(Trees.scala:1345)

(संशोधित परियोजना का नाम)

  • क्या किसी को भी Scala-maven-plugin के साथ ऐसी ही समस्या का सामना करना पड़ा?
  • क्या Scala-maven-plugin पार्सर (कंपाइलर में) के पास सीक्वेंस पार्सिंग के लिए किसी प्रकार की हार्ड लिमिट है?
  • इसे कैसे हल करें और मेरी परियोजना को संकलित करें?
  • यह IntelliJ संकलन ("प्ले" बटन) के साथ क्यों काम करता है लेकिन मेवेन संकलन के साथ नहीं?

संपादित करें:

मैं अपने Scala-maven-plugin टुकड़े वाले pom.xml खंड को जोड़ रहा हूं:

      <plugin>
        <!-- see http://davidb.github.com/scala-maven-plugin -->
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.3.1</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
            <configuration>
              <args>
                <arg>-dependencyfile</arg>
                <arg>${project.build.directory}/.scala_dependencies</arg>
              </args>
              <jvmArgs>
                <jvmArg>-Xms512m</jvmArg>
                <jvmArg>-Xmx4096m</jvmArg>
              </jvmArgs>
            </configuration>
          </execution>
        </executions>
      </plugin>
1
belka 20 पद 2017, 11:57

2 जवाब

सबसे बढ़िया उत्तर

आप ऐसा कर सकते हैं :

  • अपना कोड डी-रिकर्सिव करें या पूंछ रिकर्सिव का उपयोग करें
  • या scalac को -Xss के माध्यम से चलाने के लिए उपयोग किए जाने वाले jvm के अधिकतम स्टैक आकार को बढ़ाएँ

          <jvmArgs>
            <jvmArg>-Xss4m</jvmArg>
            <jvmArg>-Xms512m</jvmArg>
            <jvmArg>-Xmx4096m</jvmArg>
          </jvmArgs>
    

मुझे लगता है कि आईडीईए पहले से ही डिफ़ॉल्ट अधिकतम स्टैक आकार (64-बिट वीएम में iirc 1024k) बढ़ाता है।

2
David Bernard 20 पद 2017, 16:40

आदेश द्वारा आपके प्रश्नों का उत्तर देने के लिए:

  • हां। समस्या और समाधान के लिए यह देखें।
  • जेवीएम की एक स्टैक सीमा है, अब मैं थोड़ा अनुमान लगा रहा हूं लेकिन जब पार्सिंग कोड आमतौर पर एक स्टैक का उपयोग किया जाता है और यदि यह रिकर्सिव (ओई वे) है तो यह समझ में आता है कि पार्स करने के लिए बहुत लंबा अनुक्रम होने से अधिक स्टैक मेमोरी होगी। स्पष्ट रूप से मेवेन और स्कैला पार्सर के स्मृति उपयोग के तहत यह बहुत अधिक है।
  • इसे हल करने के लिए ऊपर दिए गए लिंक को देखें।
  • ऐसा हो सकता है जैसा मैंने ऊपर बताया है कि मेवेन में इंटेलिज की तुलना में अधिक स्टैक मेमोरी खपत है। संपादित करें: मुझे लगता है कि यह अधिक संभावना इस बात पर निर्भर करता है कि संकलक प्रक्रिया कैसे शुरू की जाती है, अगर मुझे गलत नहीं लगता है तो इसमें अलग-अलग स्टैक स्थिति हो सकती है।
1
Eytan 20 पद 2017, 12:43