定制maven测试类路径/类加载器序列

定制maven测试类路径/类加载器序列,maven,classpath,Maven,Classpath,我想更改maven中类路径项的顺序,以确保资源(特别是log4.properties)按照我的规范的确定顺序获取 maven目前生成的类路径没有明显的韵律/原因。这里的目的是在默认maven生成的类路径前面加上resources目录: classpath=<resources directory>:$MAVEN_DEFAULT_CLASSPATH 如何实现这一点?最好使用pom.xml中的选项,并通过maven命令行上的“-D”参数实现 这里的任务是通过SCASTATEST运行测

我想更改maven中类路径项的顺序,以确保资源(特别是log4.properties)按照我的规范的确定顺序获取

maven目前生成的类路径没有明显的韵律/原因。这里的目的是在默认maven生成的类路径前面加上resources目录:

 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] =======================================================================