定制maven测试类路径/类加载器序列
我想更改maven中类路径项的顺序,以确保资源(特别是log4.properties)按照我的规范的确定顺序获取 maven目前生成的类路径没有明显的韵律/原因。这里的目的是在默认maven生成的类路径前面加上resources目录:定制maven测试类路径/类加载器序列,maven,classpath,Maven,Classpath,我想更改maven中类路径项的顺序,以确保资源(特别是log4.properties)按照我的规范的确定顺序获取 maven目前生成的类路径没有明显的韵律/原因。这里的目的是在默认maven生成的类路径前面加上resources目录: classpath=<resources directory>:$MAVEN_DEFAULT_CLASSPATH 如何实现这一点?最好使用pom.xml中的选项,并通过maven命令行上的“-D”参数实现 这里的任务是通过SCASTATEST运行测
classpath=<resources directory>:$MAVEN_DEFAULT_CLASSPATH
如何实现这一点?最好使用pom.xml中的选项,并通过maven命令行上的“-D”参数实现
这里的任务是通过SCASTATEST运行测试:我们可以考虑它与Maven SuffFi火插件有关。我将再次检查scalatest是否重用maven surefire类路径
更新:让我们澄清一下maven为类路径实际生成了什么:/Users/steve/.m2/repository/org/apache/hadoop/hadoop-hdfs/2.2.0/hadoop-hdfs-2.2.0-tests.jar:
/Users/steve/.m2/repository/com/twitter/parquet-column/1.6.0rc3/parquet-column-1.6.0rc3.jar:
/Users/steve/.m2/repository/org/spark-project/akka/akka-slf4j_2.10/2.3.4-spark/akka-slf4j_2.10-2.3.4-spark.jar:
/Users/steve/.m2/repository/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar:
/Users/steve/.m2/repository/com/codahale/metrics/metrics-json/3.0.0/metrics-json-3.0.0.jar:
/Users/steve/.m2/repository/org/tachyonproject/tachyon-client/0.5.0/tachyon-client-\
etc ..
正如我们所看到的,我们没有遵循预期的类路径结构——即先有资源目录
根据评论员的建议,添加了另一个更新mvn-X,以下是与surefire和scalatest相关的更详细输出的摘录:
classpath=<resources directory>:$MAVEN_DEFAULT_CLASSPATH
[DEBUG] Goal: org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<additionalClasspathElements>${maven.test.additionalClasspath}</additionalClasspathElements>
<argLine>${argLine}</argLine>
<basedir default-value="${basedir}"/>
<childDelegation default-value="false">${childDelegation}</childDelegation>
<classesDirectory default-value="${project.build.outputDirectory}"/>
<classpathDependencyExcludes>${maven.test.dependency.excludes}</classpathDependencyExcludes>
<debugForkedProcess>${maven.surefire.debug}</debugForkedProcess>
<dependenciesToScan>${dependenciesToScan}</dependenciesToScan>
<disableXmlReport default-value="false">${disableXmlReport}</disableXmlReport>
<enableAssertions default-value="true">${enableAssertions}</enableAssertions>
<excludedGroups>${excludedGroups}</excludedGroups>
<failIfNoSpecifiedTests>${surefire.failIfNoSpecifiedTests}</failIfNoSpecifiedTests>
<failIfNoTests>${failIfNoTests}</failIfNoTests>
<forkCount default-value="1">${forkCount}</forkCount>
<forkMode default-value="once">${forkMode}</forkMode>
<forkedProcessTimeoutInSeconds>${surefire.timeout}</forkedProcessTimeoutInSeconds>
<groups>${groups}</groups>
<junitArtifactName default-value="junit:junit">${junitArtifactName}</junitArtifactName>
<jvm>${jvm}</jvm>
<localRepository default-value="${localRepository}"/>
<objectFactory>${objectFactory}</objectFactory>
<parallel>${parallel}</parallel>
<parallelMavenExecution default-value="${session.parallel}"/>
<parallelOptimized default-value="true">${parallelOptimized}</parallelOptimized>
<parallelTestsTimeoutForcedInSeconds>${surefire.parallel.forcedTimeout}</parallelTestsTimeou
<parallelTestsTimeoutInSeconds>${surefire.parallel.timeout}</parallelTestsTimeoutInSeconds>
<perCoreThreadCount default-value="true">${perCoreThreadCount}</perCoreThreadCount>
<pluginArtifactMap>${plugin.artifactMap}</pluginArtifactMap>
<pluginDescriptor default-value="${plugin}"/>
<printSummary default-value="true">${surefire.printSummary}</printSummary>
<projectArtifactMap>${project.artifactMap}</projectArtifactMap>
<redirectTestOutputToFile default-value="false">${maven.test.redirectTestOutputToFile}</redi
<remoteRepositories default-value="${project.pluginArtifactRepositories}"/>
<reportFormat default-value="brief">${surefire.reportFormat}</reportFormat>
<reportNameSuffix default-value="">${surefire.reportNameSuffix}</reportNameSuffix>
<reportsDirectory default-value="${project.build.directory}/surefire-reports"/>
<reuseForks default-value="true">${reuseForks}</reuseForks>
<runOrder default-value="filesystem"/>
<skip default-value="false">${maven.test.skip}</skip>
<skipExec>${maven.test.skip.exec}</skipExec>
<skipTests default-value="false">true</skipTests>
<test>${test}</test>
<testClassesDirectory default-value="${project.build.testOutputDirectory}"/>
<testFailureIgnore default-value="false">${maven.test.failure.ignore}</testFailureIgnore>
<testNGArtifactName default-value="org.testng:testng">${testNGArtifactName}</testNGArtifactN
<testSourceDirectory default-value="${project.build.testSourceDirectory}"/>
<threadCount>${threadCount}</threadCount>
<threadCountClasses default-value="0">${threadCountClasses}</threadCountClasses>
<threadCountMethods default-value="0">${threadCountMethods}</threadCountMethods>
<threadCountSuites default-value="0">${threadCountSuites}</threadCountSuites>
<trimStackTrace default-value="true">${trimStackTrace}</trimStackTrace>
<useFile default-value="true">${surefire.useFile}</useFile>
<useManifestOnlyJar default-value="true">${surefire.useManifestOnlyJar}</useManifestOnlyJar>
<useSystemClassLoader default-value="true">${surefire.useSystemClassLoader}</useSystemClassL
<useUnlimitedThreads default-value="false">${useUnlimitedThreads}</useUnlimitedThreads>
<workingDirectory>${basedir}</workingDirectory>
<project default-value="${project}"/>
<session default-value="${session}"/>
</configuration>
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.scalatest:scalatest-maven-plugin:1.0:test (test)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<argLine>-Xmx3g -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=512m</argLine>
<config>${config}</config>
<debugArgLine>${debugArgLine}</debugArgLine>
<debugForkedProcess default-value="false">${debugForkedProcess}</debugForkedProcess>
<debuggerPort default-value="5005">${debuggerPort}</debuggerPort>
<filereports>SparkTestSuite.txt</filereports>
<forkMode default-value="once">${forkMode}</forkMode>
<forkedProcessTimeoutInSeconds default-value="0">${timeout}</forkedProcessTimeoutInSeconds>
<htmlreporters>${htmlreporters}</htmlreporters>
<jUnitClasses>${junitClasses}</jUnitClasses>
<junitxml>.</junitxml>
<logForkedProcessCommand default-value="false">${logForkedProcessCommand}</logForkedProcessC
<membersOnlySuites>${membersOnlySuites}</membersOnlySuites>
<memoryFiles>${memoryFiles}</memoryFiles>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<parallel>${parallel}</parallel>
<project default-value="${project}"/>
<reporters>${reporters}</reporters>
<reportsDirectory>/shared/hwspark/sql/hbase/target/surefire-reports</reportsDirectory>
<runpath>${runpath}</runpath>
<skipTests>${skipTests}</skipTests>
<stderr>${stderr}</stderr>
<stdout>${stdout}</stdout>
<suffixes>${suffixes}</suffixes>
<suites>${suites}</suites>
<systemProperties>
<java.awt.headless>true</java.awt.headless>
<spark.test.home>${session.executionRootDirectory}</spark.test.home>
<spark.testing>1</spark.testing>
<spark.ui.enabled>false</spark.ui.enabled>
<spark.ui.showConsoleProgress>false</spark.ui.showConsoleProgress>
<spark.executor.extraClassPath>${test_classpath}</spark.executor.extraClassPath>
<spark.driver.allowMultipleContexts>true</spark.driver.allowMultipleContexts>
</systemProperties>
<tagsToExclude>${tagsToExclude}</tagsToExclude>
<tagsToInclude>${tagsToInclude}</tagsToInclude>
<testFailureIgnore>${maven.test.failure.ignore}</testFailureIgnore>
<testNGConfigFiles>${testNGXMLFiles}</testNGConfigFiles>
<testOutputDirectory>${project.build.testOutputDirectory}</testOutputDirectory>
<tests>${tests}</tests>
<testsFiles>${testsFiles}</testsFiles>
<wildcardSuites>${wildcardSuites}</wildcardSuites>
</configuration>
[DEBUG] =======================================================================
classpath=:$MAVEN\u DEFAULT\u类路径
[调试]目标:org.apache.maven.plugins:maven surefire插件:2.17:test(默认测试)
[调试]样式:常规
[调试]配置:
${maven.test.additionalClasspath}
${argLine}
${childDelegation}
${maven.test.dependency.excludes}
${maven.surefire.debug}
${dependenciesToScan}
${disableXmlReport}
${enableAssertions}
${ExcludedGroup}
${surefire.failIfNoSpecifiedTests}
${failIfNoTests}
${forkCount}
${forkMode}
${surefire.timeout}
${groups}
${junitarifactname}
${jvm}
${objectFactory}
${parallel}
${parallelOptimized}
${surefire.parallel.forcedTimeout}在哪里需要类路径?在maven surefire plugin/maven failsafe plugin?@khmarbaise好问题:我已经更新了OPIf,如果您通过maven surefire plugin运行测试,那么文件夹src/test/resources
或者更准确地说target/test classes
是类路径上的第一个文件夹,之后将是src/test/java/
/src/main/resources
(target/classes`。就是这样定义的。我可能误解了你的问题吗?@khmarbaise你完全理解这个问题:你的“答案”是我所期望的。但是,实际的类路径(如我添加的打印语句所示)与此大不相同,事实上,在这些资源目录之前放置了一堆不重要的jar文件。顺便说一句,我更新了OP,以根据您在此处的良好评论进行澄清。您可以通过mvn-X
检查输出,并在那里搜索测试类路径:
,然后您将看到您正在搜索的内容。
classpath=<resources directory>:$MAVEN_DEFAULT_CLASSPATH
[DEBUG] Goal: org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<additionalClasspathElements>${maven.test.additionalClasspath}</additionalClasspathElements>
<argLine>${argLine}</argLine>
<basedir default-value="${basedir}"/>
<childDelegation default-value="false">${childDelegation}</childDelegation>
<classesDirectory default-value="${project.build.outputDirectory}"/>
<classpathDependencyExcludes>${maven.test.dependency.excludes}</classpathDependencyExcludes>
<debugForkedProcess>${maven.surefire.debug}</debugForkedProcess>
<dependenciesToScan>${dependenciesToScan}</dependenciesToScan>
<disableXmlReport default-value="false">${disableXmlReport}</disableXmlReport>
<enableAssertions default-value="true">${enableAssertions}</enableAssertions>
<excludedGroups>${excludedGroups}</excludedGroups>
<failIfNoSpecifiedTests>${surefire.failIfNoSpecifiedTests}</failIfNoSpecifiedTests>
<failIfNoTests>${failIfNoTests}</failIfNoTests>
<forkCount default-value="1">${forkCount}</forkCount>
<forkMode default-value="once">${forkMode}</forkMode>
<forkedProcessTimeoutInSeconds>${surefire.timeout}</forkedProcessTimeoutInSeconds>
<groups>${groups}</groups>
<junitArtifactName default-value="junit:junit">${junitArtifactName}</junitArtifactName>
<jvm>${jvm}</jvm>
<localRepository default-value="${localRepository}"/>
<objectFactory>${objectFactory}</objectFactory>
<parallel>${parallel}</parallel>
<parallelMavenExecution default-value="${session.parallel}"/>
<parallelOptimized default-value="true">${parallelOptimized}</parallelOptimized>
<parallelTestsTimeoutForcedInSeconds>${surefire.parallel.forcedTimeout}</parallelTestsTimeou
<parallelTestsTimeoutInSeconds>${surefire.parallel.timeout}</parallelTestsTimeoutInSeconds>
<perCoreThreadCount default-value="true">${perCoreThreadCount}</perCoreThreadCount>
<pluginArtifactMap>${plugin.artifactMap}</pluginArtifactMap>
<pluginDescriptor default-value="${plugin}"/>
<printSummary default-value="true">${surefire.printSummary}</printSummary>
<projectArtifactMap>${project.artifactMap}</projectArtifactMap>
<redirectTestOutputToFile default-value="false">${maven.test.redirectTestOutputToFile}</redi
<remoteRepositories default-value="${project.pluginArtifactRepositories}"/>
<reportFormat default-value="brief">${surefire.reportFormat}</reportFormat>
<reportNameSuffix default-value="">${surefire.reportNameSuffix}</reportNameSuffix>
<reportsDirectory default-value="${project.build.directory}/surefire-reports"/>
<reuseForks default-value="true">${reuseForks}</reuseForks>
<runOrder default-value="filesystem"/>
<skip default-value="false">${maven.test.skip}</skip>
<skipExec>${maven.test.skip.exec}</skipExec>
<skipTests default-value="false">true</skipTests>
<test>${test}</test>
<testClassesDirectory default-value="${project.build.testOutputDirectory}"/>
<testFailureIgnore default-value="false">${maven.test.failure.ignore}</testFailureIgnore>
<testNGArtifactName default-value="org.testng:testng">${testNGArtifactName}</testNGArtifactN
<testSourceDirectory default-value="${project.build.testSourceDirectory}"/>
<threadCount>${threadCount}</threadCount>
<threadCountClasses default-value="0">${threadCountClasses}</threadCountClasses>
<threadCountMethods default-value="0">${threadCountMethods}</threadCountMethods>
<threadCountSuites default-value="0">${threadCountSuites}</threadCountSuites>
<trimStackTrace default-value="true">${trimStackTrace}</trimStackTrace>
<useFile default-value="true">${surefire.useFile}</useFile>
<useManifestOnlyJar default-value="true">${surefire.useManifestOnlyJar}</useManifestOnlyJar>
<useSystemClassLoader default-value="true">${surefire.useSystemClassLoader}</useSystemClassL
<useUnlimitedThreads default-value="false">${useUnlimitedThreads}</useUnlimitedThreads>
<workingDirectory>${basedir}</workingDirectory>
<project default-value="${project}"/>
<session default-value="${session}"/>
</configuration>
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.scalatest:scalatest-maven-plugin:1.0:test (test)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<argLine>-Xmx3g -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=512m</argLine>
<config>${config}</config>
<debugArgLine>${debugArgLine}</debugArgLine>
<debugForkedProcess default-value="false">${debugForkedProcess}</debugForkedProcess>
<debuggerPort default-value="5005">${debuggerPort}</debuggerPort>
<filereports>SparkTestSuite.txt</filereports>
<forkMode default-value="once">${forkMode}</forkMode>
<forkedProcessTimeoutInSeconds default-value="0">${timeout}</forkedProcessTimeoutInSeconds>
<htmlreporters>${htmlreporters}</htmlreporters>
<jUnitClasses>${junitClasses}</jUnitClasses>
<junitxml>.</junitxml>
<logForkedProcessCommand default-value="false">${logForkedProcessCommand}</logForkedProcessC
<membersOnlySuites>${membersOnlySuites}</membersOnlySuites>
<memoryFiles>${memoryFiles}</memoryFiles>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<parallel>${parallel}</parallel>
<project default-value="${project}"/>
<reporters>${reporters}</reporters>
<reportsDirectory>/shared/hwspark/sql/hbase/target/surefire-reports</reportsDirectory>
<runpath>${runpath}</runpath>
<skipTests>${skipTests}</skipTests>
<stderr>${stderr}</stderr>
<stdout>${stdout}</stdout>
<suffixes>${suffixes}</suffixes>
<suites>${suites}</suites>
<systemProperties>
<java.awt.headless>true</java.awt.headless>
<spark.test.home>${session.executionRootDirectory}</spark.test.home>
<spark.testing>1</spark.testing>
<spark.ui.enabled>false</spark.ui.enabled>
<spark.ui.showConsoleProgress>false</spark.ui.showConsoleProgress>
<spark.executor.extraClassPath>${test_classpath}</spark.executor.extraClassPath>
<spark.driver.allowMultipleContexts>true</spark.driver.allowMultipleContexts>
</systemProperties>
<tagsToExclude>${tagsToExclude}</tagsToExclude>
<tagsToInclude>${tagsToInclude}</tagsToInclude>
<testFailureIgnore>${maven.test.failure.ignore}</testFailureIgnore>
<testNGConfigFiles>${testNGXMLFiles}</testNGConfigFiles>
<testOutputDirectory>${project.build.testOutputDirectory}</testOutputDirectory>
<tests>${tests}</tests>
<testsFiles>${testsFiles}</testsFiles>
<wildcardSuites>${wildcardSuites}</wildcardSuites>
</configuration>
[DEBUG] =======================================================================