I must have asked a silly question, or ... Nevertheless, I'm taking another approach now, by trying to fix http://jira.codehaus.org/browse/MCOBERTURA-86 issue. To make the cobertura maven plug-in execute verify phase instead of test phase in cobertura lifecycle, I've created a new report mojo ("cobertura-integration" goal) that extends existing cobertura report, with @execute phase attribute set to verify. Verify is needed so that post-integration-test bound executions can kick in, e.g. to stop server where application was deployed for functional testing. In war project pom I've configured jetty, selenium, and surefire similarly to this<http://www.theserverlabs.com/blog/2008/09/17/automated-integration-testing-with-selenium-maven-and-jetty/>blog post (see [1] Jetty, selenium, and surefire plug-in configuration).
When running "mvn verify site", unit tests pass, then functional tests begin executing and pass well, but in post-integration-test phase jetty stop goal is executed and immediately after that selenium stop-server goal is run but it fails with fatal error (see [2] Selenium stop-server "Connection reset" error log. Because of this failure in default lifecycle before site/report generation starts, build doesn't even get to run my new cobertura-integration goal. Based on all given information, does anyone see what could be the cause of this "connection reset" error? Is order of the plug-ins correct, or should selenium server start/stop before jetty. Then I tried running "mvn cobertura:cobertura-integration" on it's own, but then another problem occurred - it seems jetty runs maven war plug-in and, probably instructed by cobertura, tries to set war plug-in's classesDirectory so that cobertura instrumented classes get used instead of regular ones. Because classesDirectory is read-only property, maven war plugin breaks the build (see [3] cobertura:cobertura-integration Maven log). Build fails even if I configure jetty classesDirectory configuration element to ${basedir}/target/generated-classes/cobertura. Does anyone know how to overcome this? Some jetty configuration? Regards, Stevo. [1] Jetty, selenium, and surefire plug-in configuration ... <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.0.0.pre5</version> <configuration> <scanIntervalSeconds>5</scanIntervalSeconds> <stopPort>9966</stopPort> <stopKey>foo</stopKey> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8080</port> <maxIdleTime>60000</maxIdleTime> </connector> <connector implementation="org.mortbay.jetty.ssl.SslSelectChannelConnector"> <port>8443</port> <maxIdleTime>60000</maxIdleTime> <keystore>${basedir}/src/test/jetty/server.keystore</keystore> <keyPassword>123456</keyPassword> </connector> </connectors> <webAppConfig> <contextPath>/mamp</contextPath> </webAppConfig> </configuration> <dependencies> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-ssl</artifactId> <version>7.0.0.pre5</version> </dependency> </dependencies> <executions> <execution> <id>start-jetty</id> <phase>pre-integration-test</phase> <goals> <goal>run-exploded</goal> </goals> <configuration> <daemon>true</daemon> </configuration> </execution> <execution> <id>stop-jetty</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>selenium-maven-plugin</artifactId> <version>1.0-rc-2-SNAPSHOT</version> <executions> <execution> <id>start-selenium</id> <phase>pre-integration-test</phase> <goals> <goal>start-server</goal> </goals> <configuration> <background>true</background> <logOutput>true</logOutput> <multiWindow>true</multiWindow> <firefoxProfileTemplate>${basedir}/src/test/selenium</firefoxProfileTemplate> </configuration> </execution> <execution> <id>stop-selenium</id> <phase>post-integration-test</phase> <goals> <goal>stop-server</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <id>integration-test</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <groups>functional</groups> </configuration> </execution> </executions> </plugin> ... [2] Selenium stop-server "Connection reset" error log [INFO] ------------------------------------------------------------------------ [ERROR] FATAL ERROR [INFO] ------------------------------------------------------------------------ [INFO] Connection reset [INFO] ------------------------------------------------------------------------ [INFO] Trace java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:652) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1064) at java.net.URLConnection.getContent(URLConnection.java:688) 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.groovy.reflection.CachedMethod.invoke(CachedMethod.java:86) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:230) at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1392) at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:2587) at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:178) at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:477) at org.codehaus.mojo.selenium.StopServerMojo.execute(StopServerMojo.groovy:66) at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:483) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:540) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:519) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:332) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:181) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137) at org.apache.maven.cli.MavenCli.main(MavenCli.java:356) 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.classworlds.Launcher.launchEnhanced(Launcher.java:315) at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) at org.codehaus.classworlds.Launcher.main(Launcher.java:375) [3] cobertura:cobertura-integration Maven log [INFO] [cobertura:cobertura-integration] [INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file Cobertura: Loaded information on 19 classes. Report time: 282ms [INFO] Cobertura Report generation was successful. [INFO] ------------------------------------------------------------------------ [INFO] Building A Web Project [INFO] task-segment: [cobertura:cobertura-integration] [INFO] ------------------------------------------------------------------------ [INFO] Preparing cobertura:cobertura-integration [INFO] [resources:resources] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 95 resources [INFO] [compiler:compile] [INFO] Nothing to compile - all classes are up to date [INFO] [cobertura:instrument] [INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file Cobertura: Loaded information on 175 classes. Instrumenting 175 files to D:\work\java\workspaces\projects\awebproject\target\generated-classes\cobertura Cobertura: Saved information on 175 classes. Instrument time: 579ms [INFO] Instrumentation was successful. [INFO] [resources:testResources] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 3 resources [INFO] [compiler:testCompile] [INFO] Nothing to compile - all classes are up to date [INFO] [surefire:test] [INFO] Surefire report directory: D:\work\java\workspaces\projects\awebproject\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running TestSuite Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.563 sec Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Error configuring: org.apache.maven.plugins:maven-war-plugin. Reason: ERROR: Cannot override read-only parameter: classesDirectory in goal: war:war [INFO] ------------------------------------------------------------------------ [INFO] Trace org.apache.maven.lifecycle.LifecycleExecutionException: Error configuring: org.apache.maven.plugins:maven-war-plugin. Reason: ERROR: Cannot override read-only parameter: classesDirectory in goal: war:war at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:707) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:540) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:1168) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:1009) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:627) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:553) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:523) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:371) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:332) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:181) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137) at org.apache.maven.cli.MavenCli.main(MavenCli.java:356) 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.classworlds.Launcher.launchEnhanced(Launcher.java:315) at org.codehaus.classworlds.Launcher.launch(Launcher.java:255) at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) at org.codehaus.classworlds.Launcher.main(Launcher.java:375) Caused by: org.apache.maven.plugin.PluginConfigurationException: Error configuring: org.apache.maven.plugins:maven-war-plugin. Reason: ERROR: Cannot override read-only parameter: classesDirectory in goal: war:war at org.apache.maven.plugin.DefaultPluginManager.validatePomConfiguration(DefaultPluginManager.java:1150) at org.apache.maven.plugin.DefaultPluginManager.getConfiguredMojo(DefaultPluginManager.java:698) at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:461) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678) ... 20 more On Thu, Mar 26, 2009 at 12:31 PM, Stevo Slavić <ssla...@gmail.com> wrote: > Hello maven users, > > Is there a way to activate a profile based on plug-in being run? I'm trying > to find a workaround for issue present in both free open source code > coverage maven report options, cobertura and emma (if there are more, please > let me know). AFAIK, both, to produce report, run code instrumentalization, > execute test phase in lifecycle separate from default, and then generate > output. Problem is that test phase is so to speak hardcoded, so surefire > execution configured to run in integration-test phase doesn't get run and > coverage data will apear to be lower than what they actually are. > > Typicaly I use TestNG for tests, and it's test groups feature, separating > tests in at least "unit", and "integration" and/or "functional" test groups. > Then I configure surefire to run "unit" tests in "test" phase, and all the > others in "integration-test" phase. If profile could be activated based on > plug-in being run, workaround would be to create a profile, activeted on > e.g. site plug-in being run, and in that profile surefire could be > configured to contain only one default execution on test phase but would > include all the tests. > > IMO, best solution would be to have following (in cobertura case, > longstanding) issues fixed ( http://jira.codehaus.org/browse/MCOBERTURA-86, > http://jira.codehaus.org/browse/MOJO-1299 ) > > Regards, > Stevo. >