java 无法在 Jzy3d 程序的子模块上执行目标 Maven Surefire 插件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/34766439/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Failure to Execute Goal Maven Surefire Plugin on Child Module for Jzy3d Program
提问by TheJerseyChemist
To simplify what I'm asking: what is a test failure and how do I rectify it?
为了简化我的问题:什么是测试失败以及如何纠正它?
I'm new to Maven, and I'm trying to get the graphical plotting application Jzy3dto work on my computer. I've updated all of the plugins to be the newest versions in the POM files for the parent and child modules, as well as checking that Maven is pointing to the newest JRE I have installed (which it is).
我是 Maven 的新手,我正在尝试让图形绘图应用程序Jzy3d在我的计算机上工作。我已经将所有插件更新为父模块和子模块的 POM 文件中的最新版本,并检查 Maven 是否指向我安装的最新 JRE(它是)。
My dependency trees are also all fine, which covers many of the avenues for which I have seen this error on this forum and elsewhere.
我的依赖树也很好,它涵盖了我在本论坛和其他地方看到此错误的许多途径。
I simply cannot isolate the issue.
我根本无法隔离这个问题。
The error message when running mvn package -eis as follows:
运行mvn package -e时的错误信息如下:
D:\Program Files\jzy3d-api-master>mvn package -e
[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] Jzy3d Master Project
[INFO] JDT core (fork of https://github.com/yonatang/JDT)
[INFO] Jzy3d API
[INFO] Jzy3d SWT Tools
[INFO] Jzy3d Tutorials
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building Jzy3d Master Project 0.9.2-SNAPSHOT
[INFO]
------------------------------------------------------------------------
[INFO]
[INFO]
------------------------------------------------------------------------
[INFO] Building JDT core (fork of https://github.com/yonatang/JDT)
0.9.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jzy3d-jdt-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ jzy3d-jdt-core ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jzy3d-jdt-core ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 18 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.3:testCompile (default-testCompile) @ jzy3d-jdt-core ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ jzy3d-jdt-core ---
[INFO] Surefire report directory: D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running il.ac.idc.jdt.SmokeTest Configuring TestNG with: TestNG60Configurator Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.639 sec <<< FAILURE! - in il.ac.idc.jdt.SmokeTest shouldRunOnExampleData(il.ac.idc.jdt.SmokeTest) Time elapsed: 0.412 sec <<< FAILURE! java.lang.AssertionError: t1_1000.tsin trangulation is correct for smf
at il.ac.idc.jdt.SmokeTest.shouldRunOnExampleData(SmokeTest.java:28)
Results :
Failed tests: SmokeTest.shouldRunOnExampleData:28 t1_1000.tsin trangulation is correct for smf
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO]
------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Jzy3d Master Project ............................... SUCCESS [ 0.022 s]
[INFO] JDT core (fork of https://github.com/yonatang/JDT) . FAILURE [ 8.853 s]
[INFO] Jzy3d API .......................................... SKIPPED
[INFO] Jzy3d SWT Tools .................................... SKIPPED
[INFO] Jzy3d Tutorials .................................... SKIPPED
[INFO]
------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 9.772 s
[INFO] Finished at: 2016-01-13T11:56:26+00:00
[INFO] Final Memory: 8M/22M
[INFO]
------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project jzy3d-jdt-core: There are test failures.
[ERROR]
[ERROR] Please refer to D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports for the individual test results.
[ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project jzy3d-jdt-core: There are test failures.
Please refer to D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports for the individual test results.
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.
Please refer to D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports for the individual test results.
at org.apache.maven.plugin.surefire.SurefireHelper.reportExecution(SurefireHelper.java:91)
at org.apache.maven.plugin.surefire.SurefirePlugin.handleSummary(SurefirePlugin.java:320)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:892)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:755)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 20 more [ERROR] [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException [ERROR] [ERROR] After correcting the problems, you can resume the build with the command [ERROR] mvn <goals> -rf :jzy3d-jdt-core
My parent POM file is:
我的父 POM 文件是:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jzy3d</groupId>
<artifactId>jzy3d-master</artifactId>
<version>0.9.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Jzy3d Master Project</name>
<url>http://www.jzy3d.org</url>
<description>A java API to draw 3d charts.</description>
<developers>
<developer>
<id>martin.pernollet</id>
<name>Martin Pernollet</name>
<email>[email protected]</email>
<url>http://twitter.com/jzy3d</url>
</developer>
<developer>
<id>nils.hoffmann</id>
<name>Nils Hoffmann</name>
</developer>
<developer>
<id>juan.barandiaran</id>
<name>Juan Barandiaran</name>
</developer>
</developers>
<licenses>
<license>
<name>The (New) BSD License</name>
<url>http://www.opensource.org/licenses/bsd-license.php</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<connection>scm:git:git://github.com/jzy3d/jzy3d-api</connection>
</scm>
<issueManagement>
<system>Github</system>
<url>https://github.com/jzy3d/jzy3d-api/issues</url>
</issueManagement>
<modules>
<module>jzy3d-api</module>
<!-- <module>jzy3d-javafx</module> -->
<module>jzy3d-swt</module>
<module>jzy3d-jdt-core</module>
<module>jzy3d-tutorials</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.jzy3d>0.9.2-SNAPSHOT</version.jzy3d>
<version.java.source>1.6</version.java.source>
<version.java.target>1.6</version.java.target>
<version.mvn.compiler>3.0</version.mvn.compiler>
<version.mvn.ftp>1.0-beta-6</version.mvn.ftp>
<version.mvn.deploy>2.4</version.mvn.deploy>
<version.mvn.javadoc>2.9.1</version.mvn.javadoc>
<version.libs.junit>4.10</version.libs.junit>
<version.libs.swt>4.2.1</version.libs.swt>
</properties>
<distributionManagement>
<repository>
<id>jzy3d-ftp</id>
<name>Jzy3d Maven Folder</name>
<url>ftp://ftp.cluster013.ovh.net/maven/releases</url>
</repository>
<snapshotRepository>
<id>jzy3d-ftp</id>
<name>Jzy3d Maven Folder SNAPSHOTS</name>
<url>ftp://ftp.cluster013.ovh.net/maven/snapshots</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<repository>
<id>jzy3d-snapshots</id>
<name>Jzy3d Snapshots</name>
<url>http://maven.jzy3d.org/snapshots</url>
</repository>
<repository>
<id>jzy3d-releases</id>
<name>Jzy3d Snapshots</name>
<url>http://maven.jzy3d.org/releases</url>
</repository>
</repositories>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.3</version>
<configuration>
<stylesheetfile>jzy3d-api/doc/layout.css</stylesheetfile>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>[ groupId ]</groupId>
<artifactId>[ artifactId ]</artifactId>
<version>[ version ]</version>
<type>[ packaging ]</type>
<classifier> [classifier - optional] </classifier>
<overWrite>[ true or false ]</overWrite>
<outputDirectory>[ output directory ]</outputDirectory>
<destFileName>[ filename ]</destFileName>
</artifactItem>
</artifactItems>
<!-- other configurations here -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>${version.mvn.ftp}</version>
</extension>
</extensions>
</build>
</project>
And the child POM for which the error message keeps running (jzy3d-jdt-core) is:
错误消息持续运行的子 POM (jzy3d-jdt-core) 是:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jzy3d</groupId>
<artifactId>jzy3d-master</artifactId>
<version>0.9.2-SNAPSHOT</version>
</parent>
<artifactId>jzy3d-jdt-core</artifactId>
<name>JDT core (fork of https://github.com/yonatang/JDT)</name>
<description>Java Delaunay Triangulation Core Library</description>
<properties>
<testng.version>6.5.2</testng.version>
<hamcrest.version>1.3.RC2</hamcrest.version>
</properties>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
采纳答案by Tunaki
To simplify what I'm asking: what is a test failure and how do I rectify it?
为了简化我的问题:什么是测试失败以及如何纠正它?
During the build of a Maven project, it executes automatically what are called unit tests. Those are Java classes whose purpose are to verify the behaviour of specific methods of the project. In this case, it turns out that one of the test is failing in your build.
在构建 Maven 项目期间,它会自动执行所谓的单元测试。这些是 Java 类,其目的是验证项目特定方法的行为。在这种情况下,事实证明其中一项测试在您的构建中失败了。
Update 12 March 2016: the issue mentioned in this post was fixed!
2016 年 3 月 12 日更新:本文中提到的问题已修复!
There is indeed a problem with the tests of the jzy3dlibrary when run on Windows. I checked out the master of their GitHub and I had the same error as you.
在windows上运行jzy3d库的测试确实有问题。我检查了他们 GitHub 的主人,我和你有同样的错误。
The reason is that, during the unit tests, the library is checking if the contents of two files are equal. However, one file is created with the line separator of the current OS, while the control file has Unix line separator.
原因是,在单元测试期间,库会检查两个文件的内容是否相等。但是,一个文件是用当前操作系统的行分隔符创建的,而控制文件有 Unix 行分隔符。
If you take a look at the file jzy3d-jdt-core\src\test\resources\outputs\t1_1000.tsin_result.tsin
, you will notice that it uses the Unix \n
line separator. The shouldRunOnExampleData
test that is failing is creating a temporary file to verify against that control file. On my Windows machine, this temporary file was created in C:\Users\{UserName}\AppData\Local\Temp\jdt-4971059362436436156.smf
and, if opened, you can see that it uses Windows line separator \r\n
. Hence, the two files are not equal and the test fails.
如果您查看文件jzy3d-jdt-core\src\test\resources\outputs\t1_1000.tsin_result.tsin
,您会注意到它使用 Unix\n
行分隔符。shouldRunOnExampleData
失败的测试是创建一个临时文件来验证该控制文件。在我的 Windows 机器上,这个临时文件是在其中创建的C:\Users\{UserName}\AppData\Local\Temp\jdt-4971059362436436156.smf
,如果打开,您可以看到它使用了 Windows line separator \r\n
。因此,这两个文件不相等,测试失败。
A possible solution, targeted at the developers of that library, is to use IOUtils.contentEqualsIgnoreEOL
inside the test shouldRunOnExampleData
, since this method does not check for the line endings when comparing two input streams. I created the issue 52for this problem and submitted a pull request, that is now merged and closed.
针对该库的开发人员的一个可能的解决方案是IOUtils.contentEqualsIgnoreEOL
在 test 内部使用shouldRunOnExampleData
,因为此方法在比较两个输入流时不检查行尾。我为此问题创建了问题 52并提交了一个拉取请求,现在已合并并关闭。
A solution for you, user of the library, is either:
图书馆用户的解决方案是:
- to change the line endings of each file inside
jzy3d-jdt-core\src\test\resources\outputs
with Windows line separator. If you are using Notepad++ to open the file, you can simply change the line-endings by going to "Edit > EOL Conversion > Windows format" and save the file. - to fix the code by using
contentEqualsIgnoreEOL
inside the classSmokeTest
(the arguments then need to be wrapped with anInputStreamReader
). - to skip the tests with
mvn clean install -DskipTests=true
.
jzy3d-jdt-core\src\test\resources\outputs
使用 Windows 行分隔符更改内部每个文件的行尾。如果您使用 Notepad++ 打开文件,您可以通过转到“编辑 > EOL 转换 > Windows 格式”并保存文件来简单地更改行尾。- 通过
contentEqualsIgnoreEOL
在类内部使用来修复代码SmokeTest
(参数然后需要用 包装InputStreamReader
)。 - 跳过测试
mvn clean install -DskipTests=true
。
In my case, I changed the code of the test to ignore the line endings. The rest of the build went fine.
就我而言,我更改了测试代码以忽略行尾。其余的构建进行得很顺利。
回答by Florian Salihovic
A test failure is a negative outcome on an assertion made when a test is implemented. You basically get an unexpected result back from a called method or a field you are reading.
测试失败是在实施测试时做出的断言的负面结果。您基本上会从被调用的方法或您正在阅读的字段中获得意想不到的结果。
-> it is broken and it has to be fixed. That does not mean you have to fix is.
-> 它坏了,必须修理。这并不意味着您必须修复。
mvn package -Dmaven.test.skip=true
might help building the sources.
可能有助于建立来源。
But instead of building the sources yourself, you could just download the binaries. These seem to be available on the web page as well.
但是,您无需自己构建源代码,而只需下载二进制文件即可。这些似乎也可以在网页上找到。
回答by palimpsestor
When I run mvn package -e
on fresh clones of either the master or the 0.9.1 branch of jzy3d, all tests pass and the maven build is successful.
当我mvn package -e
在 jzy3d 的 master 或 0.9.1 分支的新克隆上运行时,所有测试都通过并且 maven 构建成功。
From your output above, it's the shouldRunOnExampleData
test in src/test/java/il/ac/idc/jdt/SmokeTest.java
(in the jzy3d-jdt-core
submodule) that is failing for you. Looking at the source code of that test, it's pretty clear that it was designed to run on some flavor of Unix, since it references hard coded paths "/inputs/"
and "/outputs/"
.
从上面的输出中,(在子模块中)中的shouldRunOnExampleData
测试对您来说失败了。查看该测试的源代码,很明显它被设计为在某种类型的 Unix 上运行,因为它引用了硬编码路径和.src/test/java/il/ac/idc/jdt/SmokeTest.java
jzy3d-jdt-core
"/inputs/"
"/outputs/"
Also from your output above, it's clear that you are running on some flavor Windows, so it's not terribly surprising that the test does not pass for you. If you want to make the test pass, you might change those to "\\inputs\\"
and "\\outputs\\"
, respectively, or use the more flexible File.separator
that shouldwork for every OS.
同样从上面的输出中,很明显您正在某些风格的 Windows 上运行,因此测试没有通过您并不奇怪。如果你想通过测试,你可能会改变那些"\\inputs\\"
和"\\outputs\\"
分别,或使用更灵活的File.separator
是要为每一个操作系统中使用。
If you don't care about the tests passing, and just want to build the jar files produced by mvn package -e
, then you can instead run mvn package -e -DskipTests
. (Setting -Dmaven.test.skip=true
should also have worked; see the Maven documentation on skipping tests.)
如果您不关心通过的测试,而只想构建由 生成的 jar 文件mvn package -e
,那么您可以改为运行mvn package -e -DskipTests
. (设置-Dmaven.test.skip=true
也应该有效;请参阅有关跳过测试的Maven 文档。)