2013-08-28 43 views
1

环境:
1. Linux的
2.摇篮1.6/7
3.语言 - Java的sonarRunner java.lang.OutOfMemoryError:PermGen的空间

gradle这个干净的构建jacocoTestReport - 做工精细。

近日随后SonarQube安装在所提供的文件: http://docs.sonarqube.org/display/SONAR/Running+SonarQube+as+a+Service+on+Linux (声纳开始,声纳状态,声纳站等)...命令将在这一点上工作。

更改了gradle build脚本acc。到摇篮SonarRunner帮助页面在: http://www.gradle.org/docs/current/userguide/sonar_runner_plugin.html

当运行sonarRunner任务 - 我收到以下错误:

:sonarRunner 
18:56:03.997 INFO - Load batch settings 
18:56:04.140 INFO - User cache: /production/c123456/jenkins/.sonar/cache 
18:56:04.146 INFO - Install plugins 
18:56:04.851 INFO - Install JDBC driver 
18:56:04.858 WARN - H2 database should be used for evaluation purpose only 
18:56:04.858 INFO - Create JDBC datasource for jdbc:h2:tcp://devserver11.tr.company.com:9092/sonar 
18:56:05.870 INFO - Initializing Hibernate 
:sonarRunner FAILED 
java.lang.OutOfMemoryError: PermGen space 
> Building-bash-3.2$ 
在/生产/ c123456 /声纳即

安装声纳 - 声纳/ conf目录/声纳的.properties - 一切看起来正确 - 声纳/ conf目录/ wrapper.properties - 包含有效值JAVA选择采用即

# Java Additional Parameters 
wrapper.java.additional.1=-Djava.awt.headless=true 
wrapper.java.additional.2=-XX:MaxPermSize=1024m 
wrapper.java.additional.3=-XX:+HeapDumpOnOutOfMemoryError 
wrapper.java.additional.4=-XX:+CMSClassUnloadingEnabled 
wrapper.java.additional.5=-XX:+UseConcMarkSweepGC 

# RECOMMENDED : uncomment if Java Virtual Machine is a JDK but not a JRE. To know which JVM you use, execute 
# 'java -version'. JDK displays 'Server VM'. 
wrapper.java.additional.4=-server 

# Initial Java Heap Size (in MB) 
wrapper.java.initmemory=512 

# Maximum Java Heap Size (in MB) 
wrapper.java.maxmemory=1024 
  1. 谁能帮我可能会错过得到这个错误信息 - PermGen的空间问题 注意:这是从一个Linux机器上发生的事情,所以我想在其它Linux版本 机中安装声纳,还是得到了同样的错误信息。

  2. 我在我自己的本地Windows机器上安装了SonarQube/Runner,并指出build.gradle sonarRunner部分使用主机url作为本地机器/主机url我的机器名称(fqdn)带有端口(:9000)等, jdbc h2 tcp方式。

    在运行“gradle clean build jacocoTestReport sonarRunner”时,它通过了上面的错误,但给了我另一个奇怪的。 C:\ work是我检查项目的工作空间:Project_A_Svc(服务项目 - Java源代码)。

    :sonarRunner失败

    失败:建立失败,一个例外。

    • 出了什么问题: 执行失败的任务 ':sonarRunner'。

      org.sonar.runner.RunnerException: The folder 'C:\work\Project_A_Svc\src\main\java' does not exist for 'project_a_svc:project_a_svc' project (base directory = C:\work\Project_A_Svc)

    • 尝试: 与--stacktrace选项获取堆栈跟踪运行。使用--info或--debug选项运行以获取更多日志输出。

    构建失败

    总时间:38。124秒

为什么摇篮正试图寻找“的src/main/java的”当我的源代码甚至没有该文件夹结构。 Gradle的缺省结构是使用“src/main/java”作为java源代码的位置,但是我的build.gradle确实有sourceSets部分,我已经提到了查找java源代码的位置。我已经尝试了多种方法为src java/tests设置源代码,但它仍在尝试查找“src/main/java”。

的build.gradle snapshost

apply plugin: 'java' 
apply plugin: 'sonar-runner' 

    main { 
     java { 
     srcDir 'src/java' 
     } 
    } 
    test { 
     java { 
     srcDir 'test/java' 
     } 
    } 
    integrationTest { 
     java { 
     srcDir 'src/java-test' 
     } 
    } 
} 

sonarRunner的build.gradle内部分是:

def sonarServerUrl = "devserver11.tr.company.com" 
sonarRunner { 
    sonarProperties { 
     property "sonar.host.url", "http://$sonarServerUrl:9000" 
    // these are default settings for the in-memory database. Change if using a persistent DB. 
    property "sonar.jdbc.url", "jdbc:h2:tcp://$sonarServerUrl:9092/sonar" 
    property "sonar.jdbc.driverClassName", "org.h2.Driver" 
    property "sonar.jdbc.username", "sonar" 
    property "sonar.jdbc.password", "sonar" 

    //properties ["sonar.sources"] += sourceSets.main.java.srcDirs 
    //properties ["sonar.tests"] += sourceSets.test.java.srcDirs 
    //---- 
    properties["sonar.sources"] = "src/java" 
    properties["sonar.tests"] = "test/java" 

    } 
} 

任何帮助吗?非常感谢。

回答

2

我有了一些进展。

步骤

  1. 没有改变声纳/ conf目录/ sonar.properties,wrapper.properties,声纳亚军/ conf目录/ sonar-runner.properties什么。 MADE确保主机url值在sonar.properties和sonar-runner.properties中相同。

  2. 转到工作区(您已安装源代码)。

  3. 声纳亚军(可执行文件) - 它会显示路径/文件 它给了我需要sonar-project.properties因为我错过了一些变数通过声纳需要 错误。

    使用未设置link

  4. 找到SCM提供商。使用链接:http://jira.codehaus.org/browse/ACT-1714来解决它。

  5. 再次运行sonar-runner,它很好。 (注意:这个命令与运行sonarRunner不同,因为这是Gradle的声纳转轮任务)。

  6. 去了SonarQube仪表板,现在有东西显示。

PENDING明天:

  • 要在Linux命令行和从詹金斯以下的(工作的gradle调用任务)。 gradle这个干净的构建jacocoTestReport sonarRunner
  • 更新:

    • 试图运行:

    gradle这个干净的构建jacocoTestReport - 工程

    gradle这个干净的构建jacocoTestReport sonarRunner - 没有说src/main/ja VA不存在

    gradle这个清理生成jacocoTestReport sonarRunner -Dsonar.sources = SRC/JAVA - 保护正常工作

    gradle这个清理生成jacocoTestReport sonarRunner -Dsonar.sources =“SRC/JAVA,测试/ java中,SRC/java的测试” - DID没有工作(PermGen的Java错误)

    gradle这个清理生成jacocoTestReport sonarRunner -Dsonar.sources = “SRC/JAVA” - DID没有工作(PermGen的Java错误)

    gradle这个清理生成jacocoTestReport sonarRunner -Dsonar.sources = src/java -DID NOT WORKED(PermGen java错误)

    gradle sonarRunner -Dsonar.sources = src/java,test/java,src/java-test -DID NOT WORKED(错误是字符集无法读取或导入 - 字符集UTF-8或任何我最终设置为sonar.sourceEncoding)

    CLEA的gradle构建jacocoTestReport - 保护正常工作

    然后

    gradle这个sonarRunner -Dsonar.sources = “SRC/JAVA” - 保护正常工作

    我曾尝试在sonar/conf/wrapper.properties中将MaxPernGen设置为128,512,1024,2048,... upto 8000m等各种值......在解决以下错误时无效 - 运行所有gradle任务在一个命令。

    :sonarRunner FAILED 
    
    FAILURE: Build failed with an exception. 
    
    * What went wrong: 
    Execution failed for task ':sonarRunner'. 
    > java.lang.OutOfMemoryError: PermGen space 
    
    * Try: 
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 
    
    BUILD FAILED 
    

    奇怪,为什么我只要我跑收到此错误:

    :gradle这个干净的构建jacocoTestReport sonarRunner”




    OK - 得到的PermGen内存问题已解决。

    步骤: 1.在我的〜/ .bashrc或〜/ .bash_profile中。我创建了以下变量

    GRADLE_OPTS=” -XX:MaxPermSize=512m" 
    
  • 运行 “的gradle其中” 或基本上找到哪个文件的gradle(壳或.BAT)被使用。转到该路径并打开“gradle”/“gradle.bat”(对于windows)文件。

  • 进行以下更改。

    DEFAULT_JVM_OPTS="$JAVA_OPTS $GRADLE_OPTS" 
    
  • 待办事项 “在〜/ .bash_profile” 或 “〜/ .bashrc中” ...... --OR打开一个新的PuTTY会话。

  • 确保PATH变量中有gradle这个HOME /箱(Linux/Windows的)

  • 运行以下命令(这一次没有显示PermGen的错误,我早点起床)从工作区:

    gradle clean build jacocoTestReport sonarRunner

    :)今天早点回家的时间。

  • 其它类似的变量是:GRADLE_OPTS/JAVA_OPTS/SONAR_RUNNER_OPTS(其中-XX:最大..值可以被设置)在服务器(腻子会话级)或在集成开发环境或詹金斯。

  • 感谢Allyn的提示。

    +0

    所以,1解决方法是:在一份工作中用不同的任务调用两次gradle。 –

    +0

    这个解决方法将不起作用 - 因为詹金斯Gradle插件有一个BUG - 在构建部分调用2个“调用gradle脚本”调用,使第一个调用隐藏“Gradle版本”列表框/框。我会提出一张票。 –

    +0

    查看解决PermGen Java内存空间问题的最终答案。 –

    0

    如果你使用Gradle Wrapper,你可以在那里指定GRADLE_OPTS,这也应该在Jenkins上工作。

    相关问题