How to use perfmon plugins with jmeter-maven-plugin?

橙三吉。 提交于 2019-12-01 10:55:50

The error you are seeing is because jmeter-plugins depends upon JMeter 2.13 which has a broken maven dependency tree. This is something the jmeter-plugins team needs to fix (they need to release a version of jmeter plugins that depends upon JMeter 3.1).

The build is breaking because the plugin is trying to download some transitive dependencies for jmeter-plugins that don't exist, you can work around this by setting:

<downloadExtensionDependencies>false</downloadExtensionDependencies>

This does however mean that you will need to manually set all the dependencies that jmeter-plugins depends upon in your <jmeterExtensions> block.

Here is the dependency tree:

[INFO] \- kg.apc:jmeter-plugins-perfmon:jar:2.1:compile
[INFO]    +- kg.apc:jmeter-plugins-cmn-jmeter:jar:0.3:compile
[INFO]    |  +- org.apache.jmeter:jorphan:jar:2.13:compile
[INFO]    |  |  +- bsf:bsf:jar:2.4.0:compile
[INFO]    |  |  +- org.beanshell:bsh:jar:2.0b5:compile
[INFO]    |  |  +- org.bouncycastle:bcmail-jdk15on:jar:1.49:compile
[INFO]    |  |  +- org.bouncycastle:bcprov-jdk15on:jar:1.49:compile
[INFO]    |  |  +- org.bouncycastle:bcpkix-jdk15on:jar:1.49:compile
[INFO]    |  |  +- commons-codec:commons-codec:jar:1.10:compile
[INFO]    |  |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO]    |  |  +- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO]    |  |  +- commons-io:commons-io:jar:2.4:compile
[INFO]    |  |  +- commons-jexl:commons-jexl:jar:1.1:compile
[INFO]    |  |  +- org.apache.commons:commons-jexl:jar:2.1.1:compile
[INFO]    |  |  +- org.apache.commons:commons-lang3:jar:3.3.2:compile
[INFO]    |  |  +- commons-logging:commons-logging:jar:1.2:compile
[INFO]    |  |  +- commons-net:commons-net:jar:3.3:compile
[INFO]    |  |  +- dnsjava:dnsjava:jar:2.1.7:compile
[INFO]    |  |  +- excalibur-datasource:excalibur-datasource:jar:2.1:compile
[INFO]    |  |  |  +- hsqldb:hsqldb:jar:1.8.0.1:compile
[INFO]    |  |  |  +- avalon-framework:avalon-framework-api:jar:4.3:compile
[INFO]    |  |  |  +- avalon-framework:avalon-framework-impl:jar:4.3:compile
[INFO]    |  |  |  |  +- xml-apis:xmlParserAPIs:jar:2.0.2:compile
[INFO]    |  |  |  |  \- jmock:jmock:jar:1.0.1:compile
[INFO]    |  |  |  +- avalon-logkit:avalon-logkit:jar:2.1:compile
[INFO]    |  |  |  |  +- javax.servlet:servlet-api:jar:2.3:compile
[INFO]    |  |  |  |  +- geronimo-spec:geronimo-spec-javamail:jar:1.3.1-rc3:compile
[INFO]    |  |  |  |  \- geronimo-spec:geronimo-spec-jms:jar:1.1-rc4:compile
[INFO]    |  |  |  +- excalibur-instrument:excalibur-instrument-api:jar:2.1:compile
[INFO]    |  |  |  +- concurrent:concurrent:jar:1.3.4:compile
[INFO]    |  |  |  +- excalibur-component:excalibur-testcase:jar:2.1:compile
[INFO]    |  |  |  +- excalibur-component:excalibur-component:jar:2.1:compile
[INFO]    |  |  |  |  +- excalibur-instrument:excalibur-instrument-mgr-api:jar:2.1:compile
[INFO]    |  |  |  |  \- excalibur-instrument:excalibur-instrument-mgr-impl:jar:2.1:compile
[INFO]    |  |  |  \- qdox:qdox:jar:1.5:compile
[INFO]    |  |  +- excalibur-instrument:excalibur-instrument:jar:1.0:compile
[INFO]    |  |  +- excalibur-logger:excalibur-logger:jar:1.1:compile
[INFO]    |  |  +- excalibur-pool:excalibur-pool-api:jar:2.1:compile
[INFO]    |  |  +- excalibur-pool:excalibur-pool-impl:jar:2.1:compile
[INFO]    |  |  |  \- junitperf:junitperf:jar:1.8:compile
[INFO]    |  |  +- excalibur-pool:excalibur-pool-instrumented:jar:2.1:compile
[INFO]    |  |  +- org.htmlparser:htmllexer:jar:2.1:compile
[INFO]    |  |  +- org.htmlparser:htmlparser:jar:2.1:compile
[INFO]    |  |  +- org.apache.httpcomponents:httpclient:jar:4.2.6:compile
[INFO]    |  |  +- org.apache.httpcomponents:httpmime:jar:4.2.6:compile
[INFO]    |  |  +- org.apache.httpcomponents:httpcore:jar:4.2.5:compile
[INFO]    |  |  +- oro:oro:jar:2.0.8:compile
[INFO]    |  |  +- jcharts:jcharts:jar:0.7.5:compile
[INFO]    |  |  +- org.jdom:jdom:jar:1.1.3:compile
[INFO]    |  |  +- org.mozilla:rhino:jar:1.7R5:compile
[INFO]    |  |  +- junit:junit:jar:4.12:compile
[INFO]    |  |  |  \- org.hamcrest:hamcrest-core:jar:1.3:compile
[INFO]    |  |  +- soap:soap:jar:2.3.1:compile
[INFO]    |  |  +- net.sf.jtidy:jtidy:jar:r938:compile
[INFO]    |  |  +- org.apache.tika:tika-core:jar:1.7:compile
[INFO]    |  |  +- org.apache.tika:tika-parsers:jar:1.7:compile
[INFO]    |  |  |  +- org.gagravarr:vorbis-java-tika:jar:0.6:compile
[INFO]    |  |  |  +- edu.ucar:netcdf:jar:4.2.20:compile
[INFO]    |  |  |  |  \- edu.ucar:unidataCommon:jar:4.2.20:compile
[INFO]    |  |  |  |     \- net.jcip:jcip-annotations:jar:1.0:compile
[INFO]    |  |  |  +- net.sourceforge.jmatio:jmatio:jar:1.0:compile
[INFO]    |  |  |  +- org.apache.james:apache-mime4j-core:jar:0.7.2:compile
[INFO]    |  |  |  +- org.apache.james:apache-mime4j-dom:jar:0.7.2:compile
[INFO]    |  |  |  +- org.apache.commons:commons-compress:jar:1.8.1:compile
[INFO]    |  |  |  +- org.tukaani:xz:jar:1.5:compile
[INFO]    |  |  |  +- org.apache.pdfbox:pdfbox:jar:1.8.8:compile
[INFO]    |  |  |  |  +- org.apache.pdfbox:fontbox:jar:1.8.8:compile
[INFO]    |  |  |  |  \- org.apache.pdfbox:jempbox:jar:1.8.8:compile
[INFO]    |  |  |  +- org.bouncycastle:bcmail-jdk15:jar:1.45:compile
[INFO]    |  |  |  +- org.bouncycastle:bcprov-jdk15:jar:1.45:compile
[INFO]    |  |  |  +- org.apache.poi:poi:jar:3.11:compile
[INFO]    |  |  |  +- org.apache.poi:poi-scratchpad:jar:3.11:compile
[INFO]    |  |  |  +- org.apache.poi:poi-ooxml:jar:3.11:compile
[INFO]    |  |  |  |  \- org.apache.poi:poi-ooxml-schemas:jar:3.11:compile
[INFO]    |  |  |  |     \- org.apache.xmlbeans:xmlbeans:jar:2.6.0:compile
[INFO]    |  |  |  +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:compile
[INFO]    |  |  |  +- org.ow2.asm:asm-debug-all:jar:4.1:compile
[INFO]    |  |  |  +- com.googlecode.mp4parser:isoparser:jar:1.0.2:compile
[INFO]    |  |  |  |  \- org.aspectj:aspectjrt:jar:1.8.0:compile
[INFO]    |  |  |  +- com.drewnoakes:metadata-extractor:jar:2.6.2:compile
[INFO]    |  |  |  |  \- com.adobe.xmp:xmpcore:jar:5.1.2:compile
[INFO]    |  |  |  +- de.l3s.boilerpipe:boilerpipe:jar:1.1.0:compile
[INFO]    |  |  |  +- rome:rome:jar:1.0:compile
[INFO]    |  |  |  |  \- jdom:jdom:jar:1.0:compile
[INFO]    |  |  |  +- org.gagravarr:vorbis-java-core:jar:0.6:compile
[INFO]    |  |  |  +- com.googlecode.juniversalchardet:juniversalchardet:jar:1.0.3:compile
[INFO]    |  |  |  +- com.uwyn:jhighlight:jar:1.0:compile
[INFO]    |  |  |  \- com.pff:java-libpst:jar:0.8.1:compile
[INFO]    |  |  +- com.thoughtworks.xstream:xstream:jar:1.4.8:compile
[INFO]    |  |  +- xmlpull:xmlpull:jar:1.1.3.1:compile
[INFO]    |  |  +- xpp3:xpp3_min:jar:1.1.4c:compile
[INFO]    |  |  +- xalan:xalan:jar:2.7.2:compile
[INFO]    |  |  +- xalan:serializer:jar:2.7.2:compile
[INFO]    |  |  +- xerces:xercesImpl:jar:2.11.0:compile
[INFO]    |  |  +- xml-apis:xml-apis:jar:1.4.01:compile
[INFO]    |  |  +- org.apache.xmlgraphics:xmlgraphics-commons:jar:1.5:compile
[INFO]    |  |  +- javax.mail:mail:jar:1.5.0-b01:compile
[INFO]    |  |  |  \- javax.activation:activation:jar:1.1:compile
[INFO]    |  |  +- org.apache.geronimo.specs:geronimo-jms_1.1_spec:jar:1.1.1:compile
[INFO]    |  |  +- org.jsoup:jsoup:jar:1.8.1:compile
[INFO]    |  |  +- org.jodd:jodd-core:jar:3.6.4:compile
[INFO]    |  |  +- org.jodd:jodd-lagarto:jar:3.6.4:compile
[INFO]    |  |  +- org.jodd:jodd-log:jar:3.6.4:compile
[INFO]    |  |  +- org.mongodb:mongo-java-driver:jar:2.11.3:compile
[INFO]    |  |  +- com.fifesoft:rsyntaxtextarea:jar:2.5.6:compile
[INFO]    |  |  +- org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO]    |  |  \- org.slf4j:slf4j-nop:jar:1.7.10:compile
[INFO]    |  +- org.apache.jmeter:ApacheJMeter_core:jar:2.13:compile
[INFO]    |  \- kg.apc:jmeter-plugins-charts:jar:0.1:compile
[INFO]    \- kg.apc:perfmon:jar:2.2.2:compile
[INFO]       +- kg.apc:cmdrunner:jar:1.0.1:compile
[INFO]       +- org.fusesource:sigar:jar:1.6.4:compile
[INFO]       |  \- log4j:log4j:jar:1.2.15:compile
[INFO]       +- avalon-framework:avalon-framework:jar:4.1.5:compile
[INFO]       \- logkit:logkit:jar:2.0:compile

You may get away with adding only a subset of these libraries, assuming that you don't go down code paths that require code from them.

This does kind of highlight why it's important to mark dependencies that you only rely on in testing as <scope>test</scope> so that they don't get pulled down as a core dependency that is required to run your main code.

The above information hasn't made it into the Wiki yet (there's an ongoing task to add this information and move everything across to the website), it is however available in the CHANGELOG:

https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/blob/master/CHANGELOG.md

I download jmeter-plugins-manager-0.15.jar using maven-antrun-plugin and then I use command line executions (also ant) to download the most fresh plugins:

        <plugin><artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution><id>init</id><phase>initialize</phase><goals><goal>run</goal></goals>
                    <configuration>
                        <target>
                            <get src="http://jmeter-plugins.org/get/" dest="target/jmeter/lib/ext/jmeter-plugins-manager.jar"/>
                            <get src="http://central.maven.org/maven2/kg/apc/cmdrunner/2.0/cmdrunner-2.0.jar" dest="target/jmeter/lib/cmdrunner-2.0.jar"/>
                            <java classname="org.jmeterplugins.repository.PluginManagerCMDInstaller">
                                <classpath>
                                    <pathelement location="target/jmeter/lib/ext/jmeter-plugins-manager.jar"/>
                                </classpath>
                            </java>
                            <ant antfile="plugins.xml" target="plugins" inheritAll="true" />
                        </target>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency><groupId>ant-contrib</groupId><artifactId>ant-contrib</artifactId><version>1.0b3</version>
                    <exclusions>
                        <exclusion><groupId>ant</groupId><artifactId>ant</artifactId></exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </plugin>

where plugins.xml is:

<project xmlns:ac="antlib:net.sf.antcontrib">
<target name="plugins">
    <loadfile property="file" srcfile="plugins"/>
    <ac:for param="line" list="${file}" delimiter="${line.separator}">
        <ac:sequential>
            <exec executable="target/jmeter/bin/PluginsManagerCMD.sh">
                <arg value="install"/>
                <arg value="@{line}"/>
            </exec>
        </ac:sequential>
    </ac:for>
</target>

and plugins file contains the list of plugin ids:

jpgc-dummy
jpgc-fifo
jpgc-graphs-basic
jpgc-perfmon
jpgc-tst
jpgc-functions
jpgc-casutg
jpgc-ffw
jpgc-prmctl
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!