1

环境:
1. Linux
2. Gradle 1.6/7
3. 语言 - Java

gradle clean build jacocoTestReport - 工作正常。

最近关注了 SonarQube 安装提供的文档:http://docs.sonarqube.org/display/SONAR/Running+SonarQube+as+a+Service+on+Linux 声纳启动、声纳状态、声纳停止等)。 .commands 将在这一点上工作。

更改了 gradle 构建脚本 acc。到 Gradle 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$

安装在 /production/c123456/sonar 的声纳,即 - sonar/conf/sonar.properties - 一切看起来都正确 - sonar/conf/wrapper.properties - 包含 JAVA opts 的有效值,即

# 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 机器上安装 Sonar,但仍然收到相同的错误消息。

  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 失败

    FAILURE:构建失败并出现异常。

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

      org.sonar.runner.RunnerException:“project_a_svc:project_a_svc”项目的文件夹“C:\work\Project_A_Svc\src\main\java”不存在(基本目录 = C:\work\Project_A_Svc)

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

    构建失败

    总时间:38.124 秒

当我的源代码甚至没有那个文件夹结构时,为什么 Gradle试图寻找“src/main/java”。Gradle 默认结构是使用“src/main/java”作为 java 源代码位置,但我的 build.gradle 确实有 sourceSets 部分,其中我提到了查找 java 源代码的位置。我尝试了多种方法来为 src java / 测试设置源目录,但它仍在尝试寻找“src/main/java”。

build.gradle snaphost

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

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

build.gradle中的 sonarRunner 部分是:

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"

   }
}

有什么帮助吗?非常感谢。

4

2 回答 2

2

我取得了一些进展。

脚步

  1. 没有更改 sonar/conf/sonar.properties、wrapper.properties、sonar-runner/conf/sonar-runner.properties 中的任何内容。确保主机 url 值在 sonar.properties 和 sonar-runner.properties 中相同。

  2. 转到工作区(安装了源代码的地方)。

  3. Ran sonar-runner(一个可执行文件)-它将显示路径/文件它给出了我需要sonar-project.properties的错误,因为我缺少 Sonar 所需的一些变量。

    使用了链接

  4. 发现 SCM Provider 未设置。使用链接: http: //jira.codehaus.org/browse/ACT-1714来解决它。

  5. 再次运行声纳运行器,一切顺利。(注意:此命令与运行 sonarRunner 不同,因为这是 Gradle 的声纳运行器任务)。

  6. 转到 SonarQube 仪表板,现在有东西显示。

明天待定:

  1. 在 Linux 命令行和 Jenkins 中执行以下操作(作业调用 gradle 任务)。 gradle clean build jacocoTestReport sonarRunner

更新:

  • 尝试运行:

gradle clean build jacocoTestReport - 有效

gradle clean build jacocoTestReport sonarRunner - 说 src/main/java 不存在失败

gradle clean build jacocoTestReport sonarRunner -Dsonar.sources=src/java -- 工作

gradle clean build jacocoTestReport sonarRunner -Dsonar.sources="src/java,test/java,src/java-test" -- 没有工作(PermGen java 错误)

gradle clean build jacocoTestReport sonarRunner -Dsonar.sources="src/java" -- 没有工作(PermGen java 错误)

gradle clean build jacocoTestReport sonarRunner -Dsonar.sources=src/java -- DID NOT WORKED (PermGen java error)

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

gradle clea build jacocoTestReport -- 工作

然后

gradle sonarRunner -Dsonar.sources="src/java" -- 工作

我尝试将 sonar/conf/wrapper.properties 中的 MaxPernGen 设置为各种值,例如 128、512、1024、2048,... 高达 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 clean build jacocoTestReport sonarRunner"




好的- 解决了 PermGen 内存问题

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

GRADLE_OPTS=” -XX:MaxPermSize=512m"
  1. 运行“which gradle”或基本上找到使用了哪个 gradle 文件(shell 或 .bat)。转到该路径并打开“gradle”/“gradle.bat”(对于 Windows)文件。

  2. 进行以下更改。

    DEFAULT_JVM_OPTS="$JAVA_OPTS $GRADLE_OPTS"
    
  3. 执行“.~/.bash_profile”或“.~/.bashrc” ....——或打开一个新的腻子会话。

  4. 确保 PATH 变量中包含 gradle HOME / bin (Linux/Windows)

  5. 从工作区运行以下命令(这次没有显示我之前得到的 PermGen 错误):

    gradle clean build jacocoTestReport sonarRunner

    :) 今天该早点回家了。

  6. 其他类似的变量是:GRADLE_OPTS / JAVA_OPTS / SONAR_RUNNER_OPTS(其中 -XX:Max.. 值可以设置)在服务器(腻子会话级别)或在 IDE 或 Jenkins 中。

感谢 Allyn 的提示。

于 2013-08-29T00:12:14.310 回答
0

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

于 2013-09-26T13:55:51.910 回答