Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 不合法的例外情况;不拾取属性文件_Ant_Properties_Sonarqube_Illegalstateexception - Fatal编程技术网

Ant 不合法的例外情况;不拾取属性文件

Ant 不合法的例外情况;不拾取属性文件,ant,properties,sonarqube,illegalstateexception,Ant,Properties,Sonarqube,Illegalstateexception,我正在测试Sonarqube 5.3和Sonarqube Ant 2.4 jar,但在构建脚本中调用Ant sonar目标时遇到了问题 这是我的构建脚本(C:\dev\poc\sonapoc\sonapoc.xml): 我在C:\dev\poc\sonarpoc中定义了一个sonar-project.properties,其中包含 # required metadata sonar.host.url=http://localhost:9000 sonar.projectKey=dev:sonar

我正在测试Sonarqube 5.3和Sonarqube Ant 2.4 jar,但在构建脚本中调用Ant sonar目标时遇到了问题

这是我的构建脚本(C:\dev\poc\sonapoc\sonapoc.xml):

我在C:\dev\poc\sonarpoc中定义了一个sonar-project.properties,其中包含

# required metadata
sonar.host.url=http://localhost:9000
sonar.projectKey=dev:sonarpoc
sonar.projectName=DEV-sonarpoc
sonar.projectVersion=1.0
sonar.sources=source
到目前为止,一切顺利。我可以在这一点上运行sonar runner,并可以在上看到分析结果

但是,当我像上面那样运行ant脚本时,我得到了以下结果:

compile:

sonar:
[sonar:sonar] Apache Ant version 1.7.1 compiled on June 27 2008
[sonar:sonar] SonarQube Ant Task version: 2.4
[sonar:sonar] Loaded from: file:/C:/dev/jars/opensource/sonarqube/2.4/sonarqube-ant-task-2.4.jar
[sonar:sonar] User cache: C:\Users\john\.sonar\cache
[sonar:sonar] Load global repositories
[sonar:sonar] Load global repositories (done) | time=144ms
[sonar:sonar] User cache: C:\Users\john\.sonar\cache
[sonar:sonar] Load plugins index
[sonar:sonar] Load plugins index (done) | time=13ms
[sonar:sonar] Default locale: "en_IE", source code encoding: "windows-1252" (analysis is platform dependent)
[sonar:sonar] Process project properties

BUILD FAILED
java.lang.IllegalStateException: Unable to load component class org.sonar.batch.scan.ProjectLock
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:62)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:678)
    at org.sonar.core.platform.ComponentContainer.getComponentByType(ComponentContainer.java:262)
    at org.sonar.batch.scan.ProjectScanContainer.doBeforeStart(ProjectScanContainer.java:109)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:130)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:117)
    at org.sonar.batch.task.ScanTask.execute(ScanTask.java:55)
    at org.sonar.batch.task.TaskContainer.doAfterStart(TaskContainer.java:86)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:132)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:117)
    at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:122)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:119)
    at org.sonar.runner.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.sonar.runner.impl.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:61)
    at com.sun.proxy.$Proxy0.execute(Unknown Source)
    at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:274)
    at org.sonar.runner.api.EmbeddedRunner.runAnalysis(EmbeddedRunner.java:165)
    at org.sonar.runner.api.EmbeddedRunner.runAnalysis(EmbeddedRunner.java:152)
    at org.sonarsource.scanner.ant.SonarQubeTask.launchAnalysis(SonarQubeTask.java:72)
    at org.sonarsource.scanner.ant.SonarQubeTask.execute(SonarQubeTask.java:55)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    at org.apache.tools.ant.Main.runBuild(Main.java:758)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.api.batch.bootstrap.ProjectReactor
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getCompoent(ComponentContainer.java:62)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
    at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
    at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
    at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
    at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
    at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
    at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
    at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
    at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
    at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
    at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
    at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:60)
    ... 39 more
Caused by: java.lang.IllegalStateException: You must define the following mandatory properties for 'Unknown': sonar.projectKey, sonar.projectName, sonar.projectVersion, sonar.sources
    at org.sonar.batch.scan.ProjectReactorBuilder.checkMandatoryProperties(ProjectReactorBuilder.java:323)
    at org.sonar.batch.scan.ProjectReactorBuilder.defineRootProject(ProjectReactorBuilder.java:179)
    at org.sonar.batch.scan.ProjectReactorBuilder.execute(ProjectReactorBuilder.java:124)
    at org.sonar.batch.scan.MutableProjectReactorProvider.provide(MutableProjectReactorProvider.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.picocontainer.injectors.MethodInjector.invokeMethod(MethodInjector.java:129)
    at org.picocontainer.injectors.MethodInjector.access$000(MethodInjector.java:39)
    at org.picocontainer.injectors.MethodInjector$2.run(MethodInjector.java:113)
    at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
    at org.picocontainer.injectors.MethodInjector.decorateComponentInstance(MethodInjector.java:120)
    at org.picocontainer.injectors.CompositeInjector.decorateComponentInstanceCompositeInjector.java:58)
    at org.picocontainer.injectors.Reinjector.reinject(Reinjector.java:142)
    at org.picocontainer.injectors.ProviderAdapter.getComponentInstance(ProviderAdapter.java:96)
    at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:60)
    ... 53 more

Total time: 5 seconds
C:\dev\poc\sonarpoc>

问题就在上面这条线。看起来ant任务无法像sonar runner一样识别当前目录中存在sonar-project.properties文件

我认为需要额外的路径配置来告诉ant任务在当前目录中查找sonar-project.properties文件并使用它,但我不知道这是什么

我试着加上: 到C:\dev\poc\sonapoc\sonapoc.xml,但没有joy

编辑: 当我在命令行上指定sonar属性时,带有构建目标的ant脚本将成功运行

C:\dev\poc\sonarpoc>ant -f sonarpoc.xml -Dsonar.projectKey=dev:sonarpoc -Dsonar.projectName=DEV-sonarpoc -Dsonar.projectVersion=1.0 -Dsonar.sources=source clean build
因此,这强化了我的想法,即ant目标需要一些额外的路径配置来获取属性文件


以前有人遇到过这个问题吗?

Ant的SonarQube扫描仪不支持开箱即用的“sonar project.properties”文件。当您查看时,您将看到必须在Ant文件中提供这些属性:

<!-- Define the SonarQube project properties -->
<property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" />
<property name="sonar.projectName" value="Simple Java Project analyzed with the SonarQube Ant Task" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.java.binaries" value="build" />
<property name="sonar.java.libraries" value="lib/*.jar" />


如果您仍然希望使用属性文件来保存这些设置,我想您可以为此调用。但我从未尝试过这个方法,所以我不能保证它能正常工作。

Ant的SonarQube扫描仪不支持现成的“sonar project.properties”文件。当您查看时,您将看到必须在Ant文件中提供这些属性:

<!-- Define the SonarQube project properties -->
<property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" />
<property name="sonar.projectName" value="Simple Java Project analyzed with the SonarQube Ant Task" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.java.binaries" value="build" />
<property name="sonar.java.libraries" value="lib/*.jar" />


如果您仍然希望使用属性文件来保存这些设置,我想您可以为此调用。但是我从来没有尝试过,所以我不能保证这是有效的。

解决方案很简单,请验证您是否指向正确的目录

有时在cmd中,它指向C:\

要移动到另一个目录,您需要添加D:


因此,如果您指向正确目录的目录,请始终在cmd中进行验证。

解决方案很简单,请验证您是否指向正确的目录

有时在cmd中,它指向C:\

要移动到另一个目录,您需要添加D:


所以总是在cmd中验证,如果您指向正确目录的目录。

在SonarQube 5.1.2上,我可以使用参数
-propertyfile sonar project.properties设置蚂蚁分析的属性文件。在SonarQube 5.1.2上,我可以使用参数
-propertyfile sonar project.properties
设置蚂蚁分析的属性文件。你为什么要打开2.5? 5.3是最新版本。与sonar runner版本混淆。为5.3版服务器编辑的帖子为什么选择2.5版?5.3是最新版本。与sonar runner版本混淆。为serverBingo的5.3版本编辑文章!谢谢你,法布里斯。我以前尝试过在ant文件中使用属性,但sonar.projectKey语法不正确,因此我中断了这一操作。干杯答对 了谢谢你,法布里斯。我以前尝试过在ant文件中使用属性,但sonar.projectKey语法不正确,因此我中断了这一操作。干杯
C:\dev\poc\sonarpoc>ant -f sonarpoc.xml -Dsonar.projectKey=dev:sonarpoc -Dsonar.projectName=DEV-sonarpoc -Dsonar.projectVersion=1.0 -Dsonar.sources=source clean build
<!-- Define the SonarQube project properties -->
<property name="sonar.projectKey" value="org.codehaus.sonar:example-java-ant" />
<property name="sonar.projectName" value="Simple Java Project analyzed with the SonarQube Ant Task" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.java.binaries" value="build" />
<property name="sonar.java.libraries" value="lib/*.jar" />