0

Apache Stanbol をローカル インスタンスとしてインストールしようとすると、次の例外が発生します。

ERROR] Java heap space -> [Help 1]
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2786)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
    at aQute.lib.osgi.EmbeddedResource.copy(EmbeddedResource.java:62)
    at aQute.lib.osgi.EmbeddedResource.collect(EmbeddedResource.java:51)
    at aQute.lib.osgi.EmbeddedResource.build(EmbeddedResource.java:33)
    at aQute.lib.osgi.EmbeddedResource.build(EmbeddedResource.java:71)
    at aQute.lib.osgi.Verifier.getBundleClassPath(Verifier.java:255)
    at aQute.lib.osgi.Verifier.<init>(Verifier.java:204)
    at aQute.lib.osgi.Builder.doVerify(Builder.java:434)
    at aQute.lib.osgi.Builder.build(Builder.java:104)
    at org.apache.felix.bundleplugin.BundlePlugin.buildOSGiBundle(BundlePlugin.java:547)
    at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:347)
    at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:264)
    at org.apache.felix.bundleplugin.BundlePlugin.execute(BundlePlugin.java:255)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
[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/OutOfMemoryError

次のコマンドを使用して JVM メモリを増やしましたが、それでも同じエラーが発生します。私のRAMは4GBです。

export MAVEN_OPTS="-Xmx3000m -XX:MaxPermSize=512m"

この問題をトラブルシューティングして修正するにはどうすればよいですか?

ありがとうございました、

ジェイ

4

3 に答える 3

0

これは OSGI 環境で、ビルド プロセス中に大量のリソース フィルタリングがあり、Maven に十分なヒープ スペースが割り当てられていない場合に発生します。

このようにリソースとフィルターを指定すると、問題が解決するはずです...

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>**/*.xml</exclude>
        </excludes>
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>src/main/filtered-resources</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
    </resource>
</resources>

<filters>
    <filter>src/main/etc/org.yourcompany.yourproject.cfg</filter>
</filters>

注: フィルター ファイルが指定されています (.cfg で終わるファイル)。これがないと、リソース トークンを解決しようとすると OutOfMemory エラーが発生します。したがって、埋め込みリソース配列のコピー。

于 2015-02-02T21:01:48.653 に答える
0

設定する環境変数は MAVEN_OPTS です (例: MAVEN_OPTS=-Xmx1024m)。pom の maxmem 構成は、コンパイラ プラグインを設定して javac を新しい JVM にフォークする場合にのみ適用されます。それ以外の場合、プラグインは Maven と同じ VM 内で実行されるため、MAVEN_OPTS を介してコマンド ラインで渡されたメモリ内で実行されます。

Windows 7 で MAVEN_OPTS を設定するには:

  1. [マイ コンピュータ] を右クリックし、[プロパティ] を選択します
  2. システム プロパティの左側のナビゲーションにある [システムの詳細設定] リンクをクリックして、[システムの詳細設定] を表示します。
  3. [詳細] タブに移動し、[詳細システム プロパティ] 構成ウィンドウの下部にある [環境変数] ボタンをクリックします。
  4. 新しいユーザー変数を作成し、変数名を MAVEN_OPTS に設定し、変数値を -Xmx1024m (またはそれ以上) に設定します。

新しいコマンド ウィンドウを開き、mvn を実行します。

于 2013-10-10T06:26:14.567 に答える
-1

メモリを増やすことは、OOM エラーの解決策ではありません。一時的な緩和にはなりますが、恒久的な解決にはなりません。メモリ リークの原因となっているコードを修正する必要があります。

例外から、配列をコピーし、それを再帰的に実行してヒープメモリをオーバーフローさせるコードがあるようです。

Java メモリ リークを見つける方法

于 2013-10-10T06:26:05.860 に答える