2012-07-06 23 views
6

Tôi cần sử dụng surefire v2.12, nhưng tôi nhận được dấu vết ngăn xếp được đính kèm mỗi khi tôi chạy phiên bản đó. Nếu tôi chạy v2.10 tôi không nhận được lỗi. Tôi cần phiên bản này để tôi có thể chú thích các lớp thử nghiệm của mình với @Category và gắn nhãn chúng là UnitTests hoặc IntegrationTests. Dưới đây là lệnh của tôi: mvn kiểm tra -Dsurefire.version = 2.12 -XNgoại lệ với plugin chắc chắn với giai đoạn thử nghiệm trong maven

 
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project PROJECT: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test failed: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null: ExceptionInInitializerError: Unexpected ClassNotFoundException looking up class 'org.apache.maven.cli.MavenCli' -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project ASPEN: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test failed: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225) 
    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:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
    Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test failed: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    ... 19 more 
    Caused by: org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:197) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeGetter(ReflectionUtils.java:69) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.getSuites(ProviderFactory.java:148) 
    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.getSuitesIterator(ForkStarter.java:317) 
    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.runSuitesForkPerTestSet(ForkStarter.java:149) 
    at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:118) 
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:199) 
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAllProviders(AbstractSurefireMojo.java:176) 
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:135) 
    at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:98) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    ... 20 more 
    Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) 
    ... 30 more 
    Caused by: java.lang.ExceptionInInitializerError 
    ... 2 more 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at org.junit.runner.Description.getTestClass(Description.java:207) 
    at org.apache.maven.surefire.common.junit48.FilterFactory$GroupMatcherCategoryFilter.shouldRun(FilterFactory.java:207) 
    at org.apache.maven.surefire.junitcore.JUnitCoreProvider.getSuitesAsList(JUnitCoreProvider.java:169) 
    at org.apache.maven.surefire.junitcore.JUnitCoreProvider.getSuites(JUnitCoreProvider.java:102) 
    ... 35 more 
    Caused by: java.lang.RuntimeException: Unexpected ClassNotFoundException looking up class 'org.apache.maven.cli.MavenCli' 
    ... 12 more 

    (deleted lines here) 

pom.xml My

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
<parent> 
    <artifactId>sample</artifactId> 
    <groupId>sample</groupId> 
    <version>1.0</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>webapp</artifactId> 
<packaging>war</packaging> 
<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${org.slf4j-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${org.slf4j-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.9.0</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
    </dependency> 
</dependencies> 
<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>findbugs-maven-plugin</artifactId> 
      <version>2.5.1</version> 
     </plugin> 
    </plugins> 
</reporting> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>${surefire.version}</version> 
        <scope>test</scope> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <groups>com.webapp.api.annotation.type.${group.include}</groups> 
       <excludedGroups>com.webapp.api.annotation.type.${group.exclude}</excludedGroups> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
</project> 

Ngoài ra, tôi đã có thể làm điều này trong một dự án khác nhau mà tôi thành lập từ sắt vụn. Nhưng trong trường hợp này, bạn có thể thấy tôi đang ghi đè lên phiên bản plugin chắc chắn.

Bất kỳ ý tưởng nào?

Cảm ơn

+0

Bạn đang sử dụng phiên bản nào của maven? – gkamal

+0

Nếu bạn có thử nghiệm tích hợp maven-surefire-plugin là sai cách. Để thử nghiệm tích hợp, hãy sử dụng plugin maven-failsafe-thay thế. – khmarbaise

+0

@gkamal Tôi sử dụng maven 3.0.4 – bclarance

Trả lời

1

Tại sao không đặt các phiên bản vào pom này, gây pom này được điều khiển bởi bạn và bất kỳ ai khác bao giờ sẽ sử dụng dự án của bạn sẽ ngạc nhiên rằng nó không hoạt động, nguyên nhân anh nhớ để cung cấp cho các thuộc tính trên dòng lệnh. BTW: Bạn đã kiểm tra đầu ra qua mvn -X -Dsurefire.version = 2.12 vv. Tôi nghĩ bạn sẽ nhận được thông báo lỗi tương tự.

Tôi đã kiểm tra lại và nếu bạn xác định phiên bản theo cách đó dự án của bạn là không đúng nữa nếu ai đó bỏ lỡ các tùy chọn (-D ...) trên dòng lệnh, bạn sẽ có được những điều như thế này:

INFO] Scanning for projects... 
[ERROR] The build could not read 1 project -> [Help 1] 
[ERROR] 
[ERROR] The project com.soebes.katas:code:1.0-SNAPSHOT (/home/katas/pom.xml) has 1 error 
[ERROR]  'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin must be a valid version but is '${surefire.version}'. @ line 36, column 20 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[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/ProjectBuildingException 

Nói cách khác, ý tưởng tồi của nó là xác định các phiên bản plugin (hoặc phụ thuộc của nó) thông qua các tùy chọn trên dòng lệnh. Tôi chỉ khuyên bạn nên xác định phiên bản của tất cả những gì bạn cần vào pom của bạn và sử dụng đúng các bài kiểm tra đơn vị và tích hợp thông qua plugin chắc chắn và/hoặc plugin không an toàn. Điều này sẽ giải quyết vấn đề của bạn.

+0

Tôi không thể đồng ý nhiều hơn và pom cha mẹ sẽ được cập nhật cuối cùng. Vấn đề của tôi là pom cha mẹ có nhiều người phụ thuộc khác vì vậy tôi cần phải xác minh rằng nó đang làm việc trước khi tôi có thể áp dụng thay đổi/nâng cấp vĩnh viễn. Có, tôi đã chạy nó với tùy chọn -X, nhưng không thấy nó giúp tôi như thế nào. Nếu bạn biết những gì để tìm kiếm xin vui lòng tư vấn cho. – bclarance

+0

Đơn giản chỉ cần đặt số phiên bản trong bạn pom và kiểm tra nó theo cách đó. Hơn nữa, việc sử dụng các phiên bản của plugin và/hoặc phụ thuộc vào dòng lệnh không hoạt động.Phải mất 50 giây để thay đổi pom đó và thử nghiệm với các phiên bản bạn đã đưa ra. Bạn có thể nhận xét trong pom lý do tại sao bạn quyết định sử dụng một phiên bản maven-surefire-pugin khác thay vì thừa kế. – khmarbaise

+0

Thay đổi dự án pom bằng phiên bản và vẫn nhận được ngoại lệ; mvn clean test -e -X. Đây là một số đầu ra để xác minh rằng thay đổi có hiệu lực: [DEBUG] org.apache.maven.surefire: surefire-api: jar: 2.12: biên dịch (được chọn để biên dịch) bất kỳ ý tưởng nào khác? – bclarance

Các vấn đề liên quan