P_W999

Because life has no try-catch


Leave a comment

Maven/Hudson: java.lang.AssertionError: reporters.get(be.pw999.someproject:SomeModule)==null

I got the following error while building a maven 2 project on a Jenkins server using the following arguments:
clean source:jar javadoc:jar install -P DEPLOYMENT,!hudson

[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] reporters.get(be.pw999.someproject:SomeModule)==null. reporters={be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@117fefe, hudson.maven.reporters.MavenSiteArchiver@befa4f, hudson.plugins.cobertura.MavenCoberturaPublisher@23860d, hudson.maven.reporters.MavenTestJavadocArchiver@35f1d1, hudson.maven.reporters.MavenJavadocArchiver@196d593, hudson.maven.reporters.SurefireArchiver@19fd4df, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1502c5c, hudson.maven.reporters.BuildInfoRecorder@16d27cb, hudson.maven.reporters.MavenFingerprinter@1533dfc], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@d9dba8, hudson.maven.reporters.MavenSiteArchiver@50826f, hudson.plugins.cobertura.MavenCoberturaPublisher@1a35b1d, hudson.maven.reporters.MavenTestJavadocArchiver@1b2d2e3, hudson.maven.reporters.MavenJavadocArchiver@1333e28, hudson.maven.reporters.SurefireArchiver@135ef2e, org.jfrog.hudson.maven2.MavenDependenciesRecorder@307de3, hudson.maven.reporters.BuildInfoRecorder@1e9ca25, hudson.maven.reporters.MavenFingerprinter@1a086ed], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@f69935, hudson.maven.reporters.MavenSiteArchiver@1d64d59, hudson.plugins.cobertura.MavenCoberturaPublisher@703c23, hudson.maven.reporters.MavenTestJavadocArchiver@7c201b, hudson.maven.reporters.MavenJavadocArchiver@1200027, hudson.maven.reporters.SurefireArchiver@1ea0939, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1442d38, hudson.maven.reporters.BuildInfoRecorder@d27696, hudson.maven.reporters.MavenFingerprinter@123c4ad], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@e957ad, hudson.maven.reporters.MavenSiteArchiver@3a41e, hudson.plugins.cobertura.MavenCoberturaPublisher@10be80c, hudson.maven.reporters.MavenTestJavadocArchiver@af9358, hudson.maven.reporters.MavenJavadocArchiver@f29baf, hudson.maven.reporters.SurefireArchiver@97f2d9, org.jfrog.hudson.maven2.MavenDependenciesRecorder@9dfe3d, hudson.maven.reporters.BuildInfoRecorder@1cb3f45, hudson.maven.reporters.MavenFingerprinter@177329a], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1419839, hudson.maven.reporters.MavenSiteArchiver@a70146, hudson.plugins.cobertura.MavenCoberturaPublisher@44aa62, hudson.maven.reporters.MavenTestJavadocArchiver@e3c62, hudson.maven.reporters.MavenJavadocArchiver@9e5972, hudson.maven.reporters.SurefireArchiver@28521, org.jfrog.hudson.maven2.MavenDependenciesRecorder@5917ea, hudson.maven.reporters.BuildInfoRecorder@1725019, hudson.maven.reporters.MavenFingerprinter@1f81b71], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@8ccba1, hudson.maven.reporters.MavenSiteArchiver@1e8c72f, hudson.plugins.cobertura.MavenCoberturaPublisher@16d0fda, hudson.maven.reporters.MavenTestJavadocArchiver@12bc77c, hudson.maven.reporters.MavenJavadocArchiver@135a08a, hudson.maven.reporters.SurefireArchiver@1bf043e, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1fc180a, hudson.maven.reporters.BuildInfoRecorder@1afa94b, hudson.maven.reporters.MavenFingerprinter@17d99d7], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1ef0413, hudson.maven.reporters.MavenSiteArchiver@193b122, hudson.plugins.cobertura.MavenCoberturaPublisher@152351e, hudson.maven.reporters.MavenTestJavadocArchiver@1d4b67, hudson.maven.reporters.MavenJavadocArchiver@1415f74, hudson.maven.reporters.SurefireArchiver@e1f3c9, org.jfrog.hudson.maven2.MavenDependenciesRecorder@11c737b, hudson.maven.reporters.BuildInfoRecorder@4c3680, hudson.maven.reporters.MavenFingerprinter@e7dea5], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1756b65, hudson.maven.reporters.MavenSiteArchiver@18e4405, hudson.plugins.cobertura.MavenCoberturaPublisher@113bdad, hudson.maven.reporters.MavenTestJavadocArchiver@109e3e1, hudson.maven.reporters.MavenJavadocArchiver@4fd391, hudson.maven.reporters.SurefireArchiver@caf386, org.jfrog.hudson.maven2.MavenDependenciesRecorder@8cbddd, hudson.maven.reporters.BuildInfoRecorder@39f12e, hudson.maven.reporters.MavenFingerprinter@1e2d3c2], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@18a62e4, hudson.maven.reporters.MavenSiteArchiver@92c28, hudson.plugins.cobertura.MavenCoberturaPublisher@31fc44, hudson.maven.reporters.MavenTestJavadocArchiver@1a8ec0d, hudson.maven.reporters.MavenJavadocArchiver@1217463, hudson.maven.reporters.SurefireArchiver@1604caf, org.jfrog.hudson.maven2.MavenDependenciesRecorder@4924cb, hudson.maven.reporters.BuildInfoRecorder@1a5c056, hudson.maven.reporters.MavenFingerprinter@1ae24e3], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@56d071, hudson.maven.reporters.MavenSiteArchiver@14a9089, hudson.plugins.cobertura.MavenCoberturaPublisher@5735e9, hudson.maven.reporters.MavenTestJavadocArchiver@194659c, hudson.maven.reporters.MavenJavadocArchiver@19aeab4, hudson.maven.reporters.SurefireArchiver@1a6edfe, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1a7b6e3, hudson.maven.reporters.BuildInfoRecorder@1e43cbb, hudson.maven.reporters.MavenFingerprinter@1ed657a], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@ebe915, hudson.maven.reporters.MavenSiteArchiver@52db3d, hudson.plugins.cobertura.MavenCoberturaPublisher@1b79a94, hudson.maven.reporters.MavenTestJavadocArchiver@105729b, hudson.maven.reporters.MavenJavadocArchiver@a74ed9, hudson.maven.reporters.SurefireArchiver@29b91b, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1517af3, hudson.maven.reporters.BuildInfoRecorder@137b972, hudson.maven.reporters.MavenFingerprinter@f165d8], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@107768a, hudson.maven.reporters.MavenSiteArchiver@16ff018, hudson.plugins.cobertura.MavenCoberturaPublisher@1fbcce8, hudson.maven.reporters.MavenTestJavadocArchiver@49ced5, hudson.maven.reporters.MavenJavadocArchiver@1aa0e68, hudson.maven.reporters.SurefireArchiver@1c415f3, org.jfrog.hudson.maven2.MavenDependenciesRecorder@155bf47, hudson.maven.reporters.BuildInfoRecorder@bcb3c3, hudson.maven.reporters.MavenFingerprinter@19c9e41], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@fde9b, hudson.maven.reporters.MavenSiteArchiver@197d8f4, hudson.plugins.cobertura.MavenCoberturaPublisher@24a3fe, hudson.maven.reporters.MavenTestJavadocArchiver@18ab757, hudson.maven.reporters.MavenJavadocArchiver@af01e, hudson.maven.reporters.SurefireArchiver@1a6a9f, org.jfrog.hudson.maven2.MavenDependenciesRecorder@73e9b7, hudson.maven.reporters.BuildInfoRecorder@485f6c, hudson.maven.reporters.MavenFingerprinter@150a6a8], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@bddae4, hudson.maven.reporters.MavenSiteArchiver@4e2d66, hudson.plugins.cobertura.MavenCoberturaPublisher@86c13e, hudson.maven.reporters.MavenTestJavadocArchiver@f8f8cc, hudson.maven.reporters.MavenJavadocArchiver@19647bd, hudson.maven.reporters.SurefireArchiver@13fd149, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1748722, hudson.maven.reporters.BuildInfoRecorder@1c86213, hudson.maven.reporters.MavenFingerprinter@1d92112], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@81250f, hudson.maven.reporters.MavenSiteArchiver@c53a52, hudson.plugins.cobertura.MavenCoberturaPublisher@77dee9, hudson.maven.reporters.MavenTestJavadocArchiver@1cbc580, hudson.maven.reporters.MavenJavadocArchiver@1136cf6, hudson.maven.reporters.SurefireArchiver@1c80d19, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1ec714d, hudson.maven.reporters.BuildInfoRecorder@d80dc2, hudson.maven.reporters.MavenFingerprinter@d0fa99], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@5a101f, hudson.maven.reporters.MavenSiteArchiver@56b309, hudson.plugins.cobertura.MavenCoberturaPublisher@41618, hudson.maven.reporters.MavenTestJavadocArchiver@46aecc, hudson.maven.reporters.MavenJavadocArchiver@7e0eb7, hudson.maven.reporters.SurefireArchiver@18c5a21, org.jfrog.hudson.maven2.MavenDependenciesRecorder@93947, hudson.maven.reporters.BuildInfoRecorder@e716eb, hudson.maven.reporters.MavenFingerprinter@1d81fd2], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1894623, hudson.maven.reporters.MavenSiteArchiver@1f8379c, hudson.plugins.cobertura.MavenCoberturaPublisher@10b1817, hudson.maven.reporters.MavenTestJavadocArchiver@15abbac, hudson.maven.reporters.MavenJavadocArchiver@1d74e36, hudson.maven.reporters.SurefireArchiver@4ff7ab, org.jfrog.hudson.maven2.MavenDependenciesRecorder@67b7f4, hudson.maven.reporters.BuildInfoRecorder@667262, hudson.maven.reporters.MavenFingerprinter@98832e], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@e49a7, hudson.maven.reporters.MavenSiteArchiver@d00d7, hudson.plugins.cobertura.MavenCoberturaPublisher@1b22762, hudson.maven.reporters.MavenTestJavadocArchiver@13799f4, hudson.maven.reporters.MavenJavadocArchiver@15c7856, hudson.maven.reporters.SurefireArchiver@1e07ece, org.jfrog.hudson.maven2.MavenDependenciesRecorder@fbee84, hudson.maven.reporters.BuildInfoRecorder@5a39fb, hudson.maven.reporters.MavenFingerprinter@e7b40b], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@183599d, hudson.maven.reporters.MavenSiteArchiver@1a52725, hudson.plugins.cobertura.MavenCoberturaPublisher@1ad0485, hudson.maven.reporters.MavenTestJavadocArchiver@3ecf0, hudson.maven.reporters.MavenJavadocArchiver@1b888c6, hudson.maven.reporters.SurefireArchiver@1bb97e, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1414fab, hudson.maven.reporters.BuildInfoRecorder@2f0461, hudson.maven.reporters.MavenFingerprinter@b21bbc], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@12898ed, hudson.maven.reporters.MavenSiteArchiver@c88dcf, hudson.plugins.cobertura.MavenCoberturaPublisher@d63036, hudson.maven.reporters.MavenTestJavadocArchiver@1f732e3, hudson.maven.reporters.MavenJavadocArchiver@2deba1, hudson.maven.reporters.SurefireArchiver@1fb63dd, org.jfrog.hudson.maven2.MavenDependenciesRecorder@9eeeee, hudson.maven.reporters.BuildInfoRecorder@b22dcf, hudson.maven.reporters.MavenFingerprinter@1cefcef], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@87d5ce, hudson.maven.reporters.MavenSiteArchiver@c8d197, hudson.plugins.cobertura.MavenCoberturaPublisher@38235e, hudson.maven.reporters.MavenTestJavadocArchiver@19a3008, hudson.maven.reporters.MavenJavadocArchiver@1c782f8, hudson.maven.reporters.SurefireArchiver@1677d35, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1697802, hudson.maven.reporters.BuildInfoRecorder@1898fd4, hudson.maven.reporters.MavenFingerprinter@79891], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@148d93b, hudson.maven.reporters.MavenSiteArchiver@14d58a3, hudson.plugins.cobertura.MavenCoberturaPublisher@f63a1a, hudson.maven.reporters.MavenTestJavadocArchiver@1609c20, hudson.maven.reporters.MavenJavadocArchiver@1aa01c9, hudson.maven.reporters.SurefireArchiver@50890a, org.jfrog.hudson.maven2.MavenDependenciesRecorder@e0c12b, hudson.maven.reporters.BuildInfoRecorder@159869b, hudson.maven.reporters.MavenFingerprinter@9f0ad6], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@62bfd2, hudson.maven.reporters.MavenSiteArchiver@5b6329, hudson.plugins.cobertura.MavenCoberturaPublisher@1cb3bce, hudson.maven.reporters.MavenTestJavadocArchiver@1c37842, hudson.maven.reporters.MavenJavadocArchiver@c3b16, hudson.maven.reporters.SurefireArchiver@fb4962, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1f741ef, hudson.maven.reporters.BuildInfoRecorder@1d3a3cb, hudson.maven.reporters.MavenFingerprinter@7123ee], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1f3b18f, hudson.maven.reporters.MavenSiteArchiver@18ec37c, hudson.plugins.cobertura.MavenCoberturaPublisher@1c408d8, hudson.maven.reporters.MavenTestJavadocArchiver@120a918, hudson.maven.reporters.MavenJavadocArchiver@13d8b23, hudson.maven.reporters.SurefireArchiver@179c016, org.jfrog.hudson.maven2.MavenDependenciesRecorder@bc9db0, hudson.maven.reporters.BuildInfoRecorder@3204e8, hudson.maven.reporters.MavenFingerprinter@a50b05], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@8c1fec, hudson.maven.reporters.MavenSiteArchiver@1e04580, hudson.plugins.cobertura.MavenCoberturaPublisher@f3007e, hudson.maven.reporters.MavenTestJavadocArchiver@1a57ed8, hudson.maven.reporters.MavenJavadocArchiver@2a9ad4, hudson.maven.reporters.SurefireArchiver@11ad568, org.jfrog.hudson.maven2.MavenDependenciesRecorder@19e0b18, hudson.maven.reporters.BuildInfoRecorder@facf96, hudson.maven.reporters.MavenFingerprinter@5df95b], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@15b6d0b, hudson.maven.reporters.MavenSiteArchiver@b0bd28, hudson.plugins.cobertura.MavenCoberturaPublisher@152bda9, hudson.maven.reporters.MavenTestJavadocArchiver@121b563, hudson.maven.reporters.MavenJavadocArchiver@ba553, hudson.maven.reporters.SurefireArchiver@92ed31, org.jfrog.hudson.maven2.MavenDependenciesRecorder@192b706, hudson.maven.reporters.BuildInfoRecorder@1ef2f12, hudson.maven.reporters.MavenFingerprinter@13b2a11], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@172230a, hudson.maven.reporters.MavenSiteArchiver@125236, hudson.plugins.cobertura.MavenCoberturaPublisher@d392c2, hudson.maven.reporters.MavenTestJavadocArchiver@482f31, hudson.maven.reporters.MavenJavadocArchiver@112445e, hudson.maven.reporters.SurefireArchiver@467f0c, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1875df, hudson.maven.reporters.BuildInfoRecorder@c4efa5, hudson.maven.reporters.MavenFingerprinter@14c712a], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@39e610, hudson.maven.reporters.MavenSiteArchiver@3f2a84, hudson.plugins.cobertura.MavenCoberturaPublisher@1006f6c, hudson.maven.reporters.MavenTestJavadocArchiver@19337a9, hudson.maven.reporters.MavenJavadocArchiver@2b78a7, hudson.maven.reporters.SurefireArchiver@c7665c, org.jfrog.hudson.maven2.MavenDependenciesRecorder@ec4d16, hudson.maven.reporters.BuildInfoRecorder@142878f, hudson.maven.reporters.MavenFingerprinter@aff3fe], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@10bd8b3, hudson.maven.reporters.MavenSiteArchiver@1fe4302, hudson.plugins.cobertura.MavenCoberturaPublisher@1e1560c, hudson.maven.reporters.MavenTestJavadocArchiver@d8610e, hudson.maven.reporters.MavenJavadocArchiver@1cc0ec7, hudson.maven.reporters.SurefireArchiver@b74f9a, org.jfrog.hudson.maven2.MavenDependenciesRecorder@bbf797, hudson.maven.reporters.BuildInfoRecorder@18ca75c, hudson.maven.reporters.MavenFingerprinter@1c46d18], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@131e8e9, hudson.maven.reporters.MavenSiteArchiver@1de53be, hudson.plugins.cobertura.MavenCoberturaPublisher@14c0f17, hudson.maven.reporters.MavenTestJavadocArchiver@72c743, hudson.maven.reporters.MavenJavadocArchiver@178157a, hudson.maven.reporters.SurefireArchiver@ca286c, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1532381, hudson.maven.reporters.BuildInfoRecorder@23eaa8, hudson.maven.reporters.MavenFingerprinter@1e92887], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1fe7889, hudson.maven.reporters.MavenSiteArchiver@2e19e, hudson.plugins.cobertura.MavenCoberturaPublisher@12a8bad, hudson.maven.reporters.MavenTestJavadocArchiver@381bdd, hudson.maven.reporters.MavenJavadocArchiver@1ad83b9, hudson.maven.reporters.SurefireArchiver@1a11c3f, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1675d26, hudson.maven.reporters.BuildInfoRecorder@1bea6a1, hudson.maven.reporters.MavenFingerprinter@1634e54], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@171fa7f, hudson.maven.reporters.MavenSiteArchiver@a32204, hudson.plugins.cobertura.MavenCoberturaPublisher@e36fc, hudson.maven.reporters.MavenTestJavadocArchiver@13c14e4, hudson.maven.reporters.MavenJavadocArchiver@17f8664, hudson.maven.reporters.SurefireArchiver@1503f30, org.jfrog.hudson.maven2.MavenDependenciesRecorder@dcc124, hudson.maven.reporters.BuildInfoRecorder@1649933, hudson.maven.reporters.MavenFingerprinter@a2b43c], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1da8d28, hudson.maven.reporters.MavenSiteArchiver@185ea23, hudson.plugins.cobertura.MavenCoberturaPublisher@cec484, hudson.maven.reporters.MavenTestJavadocArchiver@c7cb0a, hudson.maven.reporters.MavenJavadocArchiver@e30d4f, hudson.maven.reporters.SurefireArchiver@b1468f, org.jfrog.hudson.maven2.MavenDependenciesRecorder@9c0bb, hudson.maven.reporters.BuildInfoRecorder@1fddd65, hudson.maven.reporters.MavenFingerprinter@35ed07], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@9ffb93, hudson.maven.reporters.MavenSiteArchiver@7ee5ff, hudson.plugins.cobertura.MavenCoberturaPublisher@12dd6f6, hudson.maven.reporters.MavenTestJavadocArchiver@7bd916, hudson.maven.reporters.MavenJavadocArchiver@e9598e, hudson.maven.reporters.SurefireArchiver@1f67e34, org.jfrog.hudson.maven2.MavenDependenciesRecorder@a79fe6, hudson.maven.reporters.BuildInfoRecorder@1d7901b, hudson.maven.reporters.MavenFingerprinter@408a68], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1ff1b79, hudson.maven.reporters.MavenSiteArchiver@1361e2f, hudson.plugins.cobertura.MavenCoberturaPublisher@1f7b0b1, hudson.maven.reporters.MavenTestJavadocArchiver@7169ca, hudson.maven.reporters.MavenJavadocArchiver@1d868b2, hudson.maven.reporters.SurefireArchiver@c1a712, org.jfrog.hudson.maven2.MavenDependenciesRecorder@b419de, hudson.maven.reporters.BuildInfoRecorder@1bf933b, hudson.maven.reporters.MavenFingerprinter@1bbb992], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@138373a, hudson.maven.reporters.MavenSiteArchiver@5b389f, hudson.plugins.cobertura.MavenCoberturaPublisher@e2843f, hudson.maven.reporters.MavenTestJavadocArchiver@1586353, hudson.maven.reporters.MavenJavadocArchiver@1e0fc95, hudson.maven.reporters.SurefireArchiver@1e6aea7, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1efaadb, hudson.maven.reporters.BuildInfoRecorder@1d4685a, hudson.maven.reporters.MavenFingerprinter@16bd203]} proxies={be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@f2d40, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@63c6d5, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@92ca26, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@115905d, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@b90ad9, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@775e2b, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@c7638c, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@58913e, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@a79b5f, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1c98076, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@10ebe6, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@ef64c5, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@c0ca32, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@11ac416, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@3f9fb1, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@10d321b, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@154c07e, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@129c21e, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@874131, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1c90dc7, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@a78efd, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@9ca63b, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@656ee1, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1528143, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1a48592, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@3d5f24, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@13160b7, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@c4bb19, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1d79d12, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@8915ff, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@325f5, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@b10737, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@50dd79, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@fc362c, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@4896b2, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@19dbdcf}
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.AssertionError: reporters.get(be.pw999.someproject:SomeModule)==null. reporters={be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@117fefe, hudson.maven.reporters.MavenSiteArchiver@befa4f, hudson.plugins.cobertura.MavenCoberturaPublisher@23860d, hudson.maven.reporters.MavenTestJavadocArchiver@35f1d1, hudson.maven.reporters.MavenJavadocArchiver@196d593, hudson.maven.reporters.SurefireArchiver@19fd4df, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1502c5c, hudson.maven.reporters.BuildInfoRecorder@16d27cb, hudson.maven.reporters.MavenFingerprinter@1533dfc], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@d9dba8, hudson.maven.reporters.MavenSiteArchiver@50826f, hudson.plugins.cobertura.MavenCoberturaPublisher@1a35b1d, hudson.maven.reporters.MavenTestJavadocArchiver@1b2d2e3, hudson.maven.reporters.MavenJavadocArchiver@1333e28, hudson.maven.reporters.SurefireArchiver@135ef2e, org.jfrog.hudson.maven2.MavenDependenciesRecorder@307de3, hudson.maven.reporters.BuildInfoRecorder@1e9ca25, hudson.maven.reporters.MavenFingerprinter@1a086ed], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@f69935, hudson.maven.reporters.MavenSiteArchiver@1d64d59, hudson.plugins.cobertura.MavenCoberturaPublisher@703c23, hudson.maven.reporters.MavenTestJavadocArchiver@7c201b, hudson.maven.reporters.MavenJavadocArchiver@1200027, hudson.maven.reporters.SurefireArchiver@1ea0939, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1442d38, hudson.maven.reporters.BuildInfoRecorder@d27696, hudson.maven.reporters.MavenFingerprinter@123c4ad], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@e957ad, hudson.maven.reporters.MavenSiteArchiver@3a41e, hudson.plugins.cobertura.MavenCoberturaPublisher@10be80c, hudson.maven.reporters.MavenTestJavadocArchiver@af9358, hudson.maven.reporters.MavenJavadocArchiver@f29baf, hudson.maven.reporters.SurefireArchiver@97f2d9, org.jfrog.hudson.maven2.MavenDependenciesRecorder@9dfe3d, hudson.maven.reporters.BuildInfoRecorder@1cb3f45, hudson.maven.reporters.MavenFingerprinter@177329a], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1419839, hudson.maven.reporters.MavenSiteArchiver@a70146, hudson.plugins.cobertura.MavenCoberturaPublisher@44aa62, hudson.maven.reporters.MavenTestJavadocArchiver@e3c62, hudson.maven.reporters.MavenJavadocArchiver@9e5972, hudson.maven.reporters.SurefireArchiver@28521, org.jfrog.hudson.maven2.MavenDependenciesRecorder@5917ea, hudson.maven.reporters.BuildInfoRecorder@1725019, hudson.maven.reporters.MavenFingerprinter@1f81b71], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@8ccba1, hudson.maven.reporters.MavenSiteArchiver@1e8c72f, hudson.plugins.cobertura.MavenCoberturaPublisher@16d0fda, hudson.maven.reporters.MavenTestJavadocArchiver@12bc77c, hudson.maven.reporters.MavenJavadocArchiver@135a08a, hudson.maven.reporters.SurefireArchiver@1bf043e, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1fc180a, hudson.maven.reporters.BuildInfoRecorder@1afa94b, hudson.maven.reporters.MavenFingerprinter@17d99d7], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1ef0413, hudson.maven.reporters.MavenSiteArchiver@193b122, hudson.plugins.cobertura.MavenCoberturaPublisher@152351e, hudson.maven.reporters.MavenTestJavadocArchiver@1d4b67, hudson.maven.reporters.MavenJavadocArchiver@1415f74, hudson.maven.reporters.SurefireArchiver@e1f3c9, org.jfrog.hudson.maven2.MavenDependenciesRecorder@11c737b, hudson.maven.reporters.BuildInfoRecorder@4c3680, hudson.maven.reporters.MavenFingerprinter@e7dea5], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1756b65, hudson.maven.reporters.MavenSiteArchiver@18e4405, hudson.plugins.cobertura.MavenCoberturaPublisher@113bdad, hudson.maven.reporters.MavenTestJavadocArchiver@109e3e1, hudson.maven.reporters.MavenJavadocArchiver@4fd391, hudson.maven.reporters.SurefireArchiver@caf386, org.jfrog.hudson.maven2.MavenDependenciesRecorder@8cbddd, hudson.maven.reporters.BuildInfoRecorder@39f12e, hudson.maven.reporters.MavenFingerprinter@1e2d3c2], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@18a62e4, hudson.maven.reporters.MavenSiteArchiver@92c28, hudson.plugins.cobertura.MavenCoberturaPublisher@31fc44, hudson.maven.reporters.MavenTestJavadocArchiver@1a8ec0d, hudson.maven.reporters.MavenJavadocArchiver@1217463, hudson.maven.reporters.SurefireArchiver@1604caf, org.jfrog.hudson.maven2.MavenDependenciesRecorder@4924cb, hudson.maven.reporters.BuildInfoRecorder@1a5c056, hudson.maven.reporters.MavenFingerprinter@1ae24e3], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@56d071, hudson.maven.reporters.MavenSiteArchiver@14a9089, hudson.plugins.cobertura.MavenCoberturaPublisher@5735e9, hudson.maven.reporters.MavenTestJavadocArchiver@194659c, hudson.maven.reporters.MavenJavadocArchiver@19aeab4, hudson.maven.reporters.SurefireArchiver@1a6edfe, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1a7b6e3, hudson.maven.reporters.BuildInfoRecorder@1e43cbb, hudson.maven.reporters.MavenFingerprinter@1ed657a], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@ebe915, hudson.maven.reporters.MavenSiteArchiver@52db3d, hudson.plugins.cobertura.MavenCoberturaPublisher@1b79a94, hudson.maven.reporters.MavenTestJavadocArchiver@105729b, hudson.maven.reporters.MavenJavadocArchiver@a74ed9, hudson.maven.reporters.SurefireArchiver@29b91b, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1517af3, hudson.maven.reporters.BuildInfoRecorder@137b972, hudson.maven.reporters.MavenFingerprinter@f165d8], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@107768a, hudson.maven.reporters.MavenSiteArchiver@16ff018, hudson.plugins.cobertura.MavenCoberturaPublisher@1fbcce8, hudson.maven.reporters.MavenTestJavadocArchiver@49ced5, hudson.maven.reporters.MavenJavadocArchiver@1aa0e68, hudson.maven.reporters.SurefireArchiver@1c415f3, org.jfrog.hudson.maven2.MavenDependenciesRecorder@155bf47, hudson.maven.reporters.BuildInfoRecorder@bcb3c3, hudson.maven.reporters.MavenFingerprinter@19c9e41], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@fde9b, hudson.maven.reporters.MavenSiteArchiver@197d8f4, hudson.plugins.cobertura.MavenCoberturaPublisher@24a3fe, hudson.maven.reporters.MavenTestJavadocArchiver@18ab757, hudson.maven.reporters.MavenJavadocArchiver@af01e, hudson.maven.reporters.SurefireArchiver@1a6a9f, org.jfrog.hudson.maven2.MavenDependenciesRecorder@73e9b7, hudson.maven.reporters.BuildInfoRecorder@485f6c, hudson.maven.reporters.MavenFingerprinter@150a6a8], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@bddae4, hudson.maven.reporters.MavenSiteArchiver@4e2d66, hudson.plugins.cobertura.MavenCoberturaPublisher@86c13e, hudson.maven.reporters.MavenTestJavadocArchiver@f8f8cc, hudson.maven.reporters.MavenJavadocArchiver@19647bd, hudson.maven.reporters.SurefireArchiver@13fd149, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1748722, hudson.maven.reporters.BuildInfoRecorder@1c86213, hudson.maven.reporters.MavenFingerprinter@1d92112], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@81250f, hudson.maven.reporters.MavenSiteArchiver@c53a52, hudson.plugins.cobertura.MavenCoberturaPublisher@77dee9, hudson.maven.reporters.MavenTestJavadocArchiver@1cbc580, hudson.maven.reporters.MavenJavadocArchiver@1136cf6, hudson.maven.reporters.SurefireArchiver@1c80d19, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1ec714d, hudson.maven.reporters.BuildInfoRecorder@d80dc2, hudson.maven.reporters.MavenFingerprinter@d0fa99], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@5a101f, hudson.maven.reporters.MavenSiteArchiver@56b309, hudson.plugins.cobertura.MavenCoberturaPublisher@41618, hudson.maven.reporters.MavenTestJavadocArchiver@46aecc, hudson.maven.reporters.MavenJavadocArchiver@7e0eb7, hudson.maven.reporters.SurefireArchiver@18c5a21, org.jfrog.hudson.maven2.MavenDependenciesRecorder@93947, hudson.maven.reporters.BuildInfoRecorder@e716eb, hudson.maven.reporters.MavenFingerprinter@1d81fd2], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1894623, hudson.maven.reporters.MavenSiteArchiver@1f8379c, hudson.plugins.cobertura.MavenCoberturaPublisher@10b1817, hudson.maven.reporters.MavenTestJavadocArchiver@15abbac, hudson.maven.reporters.MavenJavadocArchiver@1d74e36, hudson.maven.reporters.SurefireArchiver@4ff7ab, org.jfrog.hudson.maven2.MavenDependenciesRecorder@67b7f4, hudson.maven.reporters.BuildInfoRecorder@667262, hudson.maven.reporters.MavenFingerprinter@98832e], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@e49a7, hudson.maven.reporters.MavenSiteArchiver@d00d7, hudson.plugins.cobertura.MavenCoberturaPublisher@1b22762, hudson.maven.reporters.MavenTestJavadocArchiver@13799f4, hudson.maven.reporters.MavenJavadocArchiver@15c7856, hudson.maven.reporters.SurefireArchiver@1e07ece, org.jfrog.hudson.maven2.MavenDependenciesRecorder@fbee84, hudson.maven.reporters.BuildInfoRecorder@5a39fb, hudson.maven.reporters.MavenFingerprinter@e7b40b], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@183599d, hudson.maven.reporters.MavenSiteArchiver@1a52725, hudson.plugins.cobertura.MavenCoberturaPublisher@1ad0485, hudson.maven.reporters.MavenTestJavadocArchiver@3ecf0, hudson.maven.reporters.MavenJavadocArchiver@1b888c6, hudson.maven.reporters.SurefireArchiver@1bb97e, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1414fab, hudson.maven.reporters.BuildInfoRecorder@2f0461, hudson.maven.reporters.MavenFingerprinter@b21bbc], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@12898ed, hudson.maven.reporters.MavenSiteArchiver@c88dcf, hudson.plugins.cobertura.MavenCoberturaPublisher@d63036, hudson.maven.reporters.MavenTestJavadocArchiver@1f732e3, hudson.maven.reporters.MavenJavadocArchiver@2deba1, hudson.maven.reporters.SurefireArchiver@1fb63dd, org.jfrog.hudson.maven2.MavenDependenciesRecorder@9eeeee, hudson.maven.reporters.BuildInfoRecorder@b22dcf, hudson.maven.reporters.MavenFingerprinter@1cefcef], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@87d5ce, hudson.maven.reporters.MavenSiteArchiver@c8d197, hudson.plugins.cobertura.MavenCoberturaPublisher@38235e, hudson.maven.reporters.MavenTestJavadocArchiver@19a3008, hudson.maven.reporters.MavenJavadocArchiver@1c782f8, hudson.maven.reporters.SurefireArchiver@1677d35, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1697802, hudson.maven.reporters.BuildInfoRecorder@1898fd4, hudson.maven.reporters.MavenFingerprinter@79891], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@148d93b, hudson.maven.reporters.MavenSiteArchiver@14d58a3, hudson.plugins.cobertura.MavenCoberturaPublisher@f63a1a, hudson.maven.reporters.MavenTestJavadocArchiver@1609c20, hudson.maven.reporters.MavenJavadocArchiver@1aa01c9, hudson.maven.reporters.SurefireArchiver@50890a, org.jfrog.hudson.maven2.MavenDependenciesRecorder@e0c12b, hudson.maven.reporters.BuildInfoRecorder@159869b, hudson.maven.reporters.MavenFingerprinter@9f0ad6], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@62bfd2, hudson.maven.reporters.MavenSiteArchiver@5b6329, hudson.plugins.cobertura.MavenCoberturaPublisher@1cb3bce, hudson.maven.reporters.MavenTestJavadocArchiver@1c37842, hudson.maven.reporters.MavenJavadocArchiver@c3b16, hudson.maven.reporters.SurefireArchiver@fb4962, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1f741ef, hudson.maven.reporters.BuildInfoRecorder@1d3a3cb, hudson.maven.reporters.MavenFingerprinter@7123ee], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1f3b18f, hudson.maven.reporters.MavenSiteArchiver@18ec37c, hudson.plugins.cobertura.MavenCoberturaPublisher@1c408d8, hudson.maven.reporters.MavenTestJavadocArchiver@120a918, hudson.maven.reporters.MavenJavadocArchiver@13d8b23, hudson.maven.reporters.SurefireArchiver@179c016, org.jfrog.hudson.maven2.MavenDependenciesRecorder@bc9db0, hudson.maven.reporters.BuildInfoRecorder@3204e8, hudson.maven.reporters.MavenFingerprinter@a50b05], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@8c1fec, hudson.maven.reporters.MavenSiteArchiver@1e04580, hudson.plugins.cobertura.MavenCoberturaPublisher@f3007e, hudson.maven.reporters.MavenTestJavadocArchiver@1a57ed8, hudson.maven.reporters.MavenJavadocArchiver@2a9ad4, hudson.maven.reporters.SurefireArchiver@11ad568, org.jfrog.hudson.maven2.MavenDependenciesRecorder@19e0b18, hudson.maven.reporters.BuildInfoRecorder@facf96, hudson.maven.reporters.MavenFingerprinter@5df95b], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@15b6d0b, hudson.maven.reporters.MavenSiteArchiver@b0bd28, hudson.plugins.cobertura.MavenCoberturaPublisher@152bda9, hudson.maven.reporters.MavenTestJavadocArchiver@121b563, hudson.maven.reporters.MavenJavadocArchiver@ba553, hudson.maven.reporters.SurefireArchiver@92ed31, org.jfrog.hudson.maven2.MavenDependenciesRecorder@192b706, hudson.maven.reporters.BuildInfoRecorder@1ef2f12, hudson.maven.reporters.MavenFingerprinter@13b2a11], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@172230a, hudson.maven.reporters.MavenSiteArchiver@125236, hudson.plugins.cobertura.MavenCoberturaPublisher@d392c2, hudson.maven.reporters.MavenTestJavadocArchiver@482f31, hudson.maven.reporters.MavenJavadocArchiver@112445e, hudson.maven.reporters.SurefireArchiver@467f0c, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1875df, hudson.maven.reporters.BuildInfoRecorder@c4efa5, hudson.maven.reporters.MavenFingerprinter@14c712a], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@39e610, hudson.maven.reporters.MavenSiteArchiver@3f2a84, hudson.plugins.cobertura.MavenCoberturaPublisher@1006f6c, hudson.maven.reporters.MavenTestJavadocArchiver@19337a9, hudson.maven.reporters.MavenJavadocArchiver@2b78a7, hudson.maven.reporters.SurefireArchiver@c7665c, org.jfrog.hudson.maven2.MavenDependenciesRecorder@ec4d16, hudson.maven.reporters.BuildInfoRecorder@142878f, hudson.maven.reporters.MavenFingerprinter@aff3fe], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@10bd8b3, hudson.maven.reporters.MavenSiteArchiver@1fe4302, hudson.plugins.cobertura.MavenCoberturaPublisher@1e1560c, hudson.maven.reporters.MavenTestJavadocArchiver@d8610e, hudson.maven.reporters.MavenJavadocArchiver@1cc0ec7, hudson.maven.reporters.SurefireArchiver@b74f9a, org.jfrog.hudson.maven2.MavenDependenciesRecorder@bbf797, hudson.maven.reporters.BuildInfoRecorder@18ca75c, hudson.maven.reporters.MavenFingerprinter@1c46d18], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@131e8e9, hudson.maven.reporters.MavenSiteArchiver@1de53be, hudson.plugins.cobertura.MavenCoberturaPublisher@14c0f17, hudson.maven.reporters.MavenTestJavadocArchiver@72c743, hudson.maven.reporters.MavenJavadocArchiver@178157a, hudson.maven.reporters.SurefireArchiver@ca286c, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1532381, hudson.maven.reporters.BuildInfoRecorder@23eaa8, hudson.maven.reporters.MavenFingerprinter@1e92887], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1fe7889, hudson.maven.reporters.MavenSiteArchiver@2e19e, hudson.plugins.cobertura.MavenCoberturaPublisher@12a8bad, hudson.maven.reporters.MavenTestJavadocArchiver@381bdd, hudson.maven.reporters.MavenJavadocArchiver@1ad83b9, hudson.maven.reporters.SurefireArchiver@1a11c3f, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1675d26, hudson.maven.reporters.BuildInfoRecorder@1bea6a1, hudson.maven.reporters.MavenFingerprinter@1634e54], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@171fa7f, hudson.maven.reporters.MavenSiteArchiver@a32204, hudson.plugins.cobertura.MavenCoberturaPublisher@e36fc, hudson.maven.reporters.MavenTestJavadocArchiver@13c14e4, hudson.maven.reporters.MavenJavadocArchiver@17f8664, hudson.maven.reporters.SurefireArchiver@1503f30, org.jfrog.hudson.maven2.MavenDependenciesRecorder@dcc124, hudson.maven.reporters.BuildInfoRecorder@1649933, hudson.maven.reporters.MavenFingerprinter@a2b43c], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1da8d28, hudson.maven.reporters.MavenSiteArchiver@185ea23, hudson.plugins.cobertura.MavenCoberturaPublisher@cec484, hudson.maven.reporters.MavenTestJavadocArchiver@c7cb0a, hudson.maven.reporters.MavenJavadocArchiver@e30d4f, hudson.maven.reporters.SurefireArchiver@b1468f, org.jfrog.hudson.maven2.MavenDependenciesRecorder@9c0bb, hudson.maven.reporters.BuildInfoRecorder@1fddd65, hudson.maven.reporters.MavenFingerprinter@35ed07], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@9ffb93, hudson.maven.reporters.MavenSiteArchiver@7ee5ff, hudson.plugins.cobertura.MavenCoberturaPublisher@12dd6f6, hudson.maven.reporters.MavenTestJavadocArchiver@7bd916, hudson.maven.reporters.MavenJavadocArchiver@e9598e, hudson.maven.reporters.SurefireArchiver@1f67e34, org.jfrog.hudson.maven2.MavenDependenciesRecorder@a79fe6, hudson.maven.reporters.BuildInfoRecorder@1d7901b, hudson.maven.reporters.MavenFingerprinter@408a68], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@1ff1b79, hudson.maven.reporters.MavenSiteArchiver@1361e2f, hudson.plugins.cobertura.MavenCoberturaPublisher@1f7b0b1, hudson.maven.reporters.MavenTestJavadocArchiver@7169ca, hudson.maven.reporters.MavenJavadocArchiver@1d868b2, hudson.maven.reporters.SurefireArchiver@c1a712, org.jfrog.hudson.maven2.MavenDependenciesRecorder@b419de, hudson.maven.reporters.BuildInfoRecorder@1bf933b, hudson.maven.reporters.MavenFingerprinter@1bbb992], be.pw999.someproject:SomeModule=[hudson.maven.reporters.MavenArtifactArchiver@138373a, hudson.maven.reporters.MavenSiteArchiver@5b389f, hudson.plugins.cobertura.MavenCoberturaPublisher@e2843f, hudson.maven.reporters.MavenTestJavadocArchiver@1586353, hudson.maven.reporters.MavenJavadocArchiver@1e0fc95, hudson.maven.reporters.SurefireArchiver@1e6aea7, org.jfrog.hudson.maven2.MavenDependenciesRecorder@1efaadb, hudson.maven.reporters.BuildInfoRecorder@1d4685a, hudson.maven.reporters.MavenFingerprinter@16bd203]} proxies={be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@f2d40, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@63c6d5, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@92ca26, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@115905d, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@b90ad9, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@775e2b, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@c7638c, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@58913e, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@a79b5f, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1c98076, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@10ebe6, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@ef64c5, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@c0ca32, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@11ac416, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@3f9fb1, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@10d321b, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@154c07e, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@129c21e, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@874131, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1c90dc7, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@a78efd, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@9ca63b, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@656ee1, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1528143, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1a48592, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@3d5f24, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@13160b7, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@c4bb19, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@1d79d12, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@8915ff, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@325f5, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@b10737, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@50dd79, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@fc362c, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@4896b2, be.pw999.someproject:SomeModule=hudson.maven.AbstractMavenBuilder$FilterImpl@19dbdcf}
	at hudson.maven.Maven2Builder.postModule(Maven2Builder.java:126)
	at hudson.maven.MavenBuilder$Adapter.fireLeaveModule(MavenBuilder.java:354)
	at hudson.maven.MavenBuilder$Adapter.postBuild(MavenBuilder.java:308)
	at org.apache.maven.lifecycle.LifecycleExecutorInterceptor.execute(LifecycleExecutorInterceptor.java:68)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
	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 hudson.maven.agent.Main.launch(Main.java:204)
	at hudson.maven.MavenBuilder.call(MavenBuilder.java:154)
	at hudson.maven.Maven2Builder.call(Maven2Builder.java:79)
	at hudson.maven.Maven2Builder.call(Maven2Builder.java:55)
	at hudson.remoting.UserRequest.perform(UserRequest.java:118)
	at hudson.remoting.UserRequest.perform(UserRequest.java:48)
	at hudson.remoting.Request$2.run(Request.java:326)
	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:662)
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 32 minutes 29 seconds
[INFO] Finished at: Wed Jan 08 10:29:56 CET 2014
[INFO] Final Memory: 143M/993M
[INFO] ------------------------------------------------------------------------
channel stopped
Finished: FAILURE

This turns out the be an old Hudson bug (2008′ish) which you should not expect to be fixed soon. The error is related to the configuration of your modules using profiles. Consider the following pom.xml extract:

	<modules>
		<module>UTILS</module>
		<module>CORE</module>
		<module>EAR</module>
	</modules>
	<profile>
		<activation>
			<property>
				<name>BUILD_NUMBER</name>
			</property>
		</activation>
		<id>FULL</id>
		<modules>
			<module>UTILS</module>
			<module>CORE</module>
			<module>EAR</module>
			<module>BATCH<module>
			<module>MDB<module>
		</modules>
	</profile>

The FULL profile is activated using the BUILD_NUMBER system property which is automatically set by Jenkins. The build will fail once it reaches the BATCH and MDB modules.

The quick workaround for this issue is simply not adding modules using profiles, the slow workaround is bumping the Jenkins bug and hope someone will fix it ;) .


Leave a comment

Maven: A required class is missing: hidden/org/codehaus/plexus/interpolation/ValueSource

I had the following issue when building one of our projects on a freshly installed Linux Mint:

-----------------------------------------------------
this realm = app0.child-container[org.zeroturnaround:javarebel-maven-plugin:1.0.5]
urls[0] = file:/home/phillip/.m2/repository/org/zeroturnaround/javarebel-maven-plugin/1.0.5/javarebel-maven-plugin-1.0.5.jar
urls[1] = file:/home/phillip/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar
urls[2] = file:/home/phillip/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar
urls[3] = file:/home/phillip/.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar
Number of imports: 10
import: org.codehaus.classworlds.Entry@a6c57a42
import: org.codehaus.classworlds.Entry@12f43f3b
import: org.codehaus.classworlds.Entry@20025374
import: org.codehaus.classworlds.Entry@f8e44ca4
import: org.codehaus.classworlds.Entry@92758522
import: org.codehaus.classworlds.Entry@ebf2705b
import: org.codehaus.classworlds.Entry@bb25e54
import: org.codehaus.classworlds.Entry@bece5185
import: org.codehaus.classworlds.Entry@3fee8e37
import: org.codehaus.classworlds.Entry@3fee19d8


this realm = plexus.core
urls[0] = file:/usr/share/maven2/lib/maven-debian-uber.jar
Number of imports: 10
import: org.codehaus.classworlds.Entry@a6c57a42
import: org.codehaus.classworlds.Entry@12f43f3b
import: org.codehaus.classworlds.Entry@20025374
import: org.codehaus.classworlds.Entry@f8e44ca4
import: org.codehaus.classworlds.Entry@92758522
import: org.codehaus.classworlds.Entry@ebf2705b
import: org.codehaus.classworlds.Entry@bb25e54
import: org.codehaus.classworlds.Entry@bece5185
import: org.codehaus.classworlds.Entry@3fee8e37
import: org.codehaus.classworlds.Entry@3fee19d8
-----------------------------------------------------
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Internal error in the plugin manager executing goal 'org.zeroturnaround:javarebel-maven-plugin:1.0.5:generate': 
Unable to load the mojo 'org.zeroturnaround:javarebel-maven-plugin:1.0.5:generate' in the plugin 'org.zeroturnaround:javarebel-maven-plugin'. 
A required class is missing: hidden/org/codehaus/plexus/interpolation/ValueSource
hidden.org.codehaus.plexus.interpolation.ValueSource
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47 seconds
[INFO] Finished at: Thu Jan 09 19:08:02 CET 2014
[INFO] Final Memory: 52M/124M
[INFO] ------------------------------------------------------------------------

Turns out that the maven 2 version that comes from the Ubuntu repository is a bit fubar.
Download the latest maven 2 release from maven.apache.org and replace the /usr/share/maven2/lib/maven-debian-uber.jar library with the on from the downloaded archive. Now your build won’t fail (at least on this issue).

Or fix it in shell style:

if [[ -d /usr/share/maven2/lib/ ]]; then echo Good; else echo Maven not installed ?; exit 1; fi
wget http://apache.belnet.be/maven/maven-2/2.2.1/binaries/apache-maven-2.2.1-bin.tar.gz
tar --wildcards --strip-components 2 -xvf apache-maven-2.2.1-bin.tar.gz apache-maven-2.2.1/lib/*
rm apache-maven-2.*-bin.tar.gz
echo Needs root access to change files in /usr/share/maven2/lib/
sudo rm /usr/share/maven2/lib/maven-debian-*.jar
sudo mv maven-2*-uber.jar /usr/share/maven2/lib/


Leave a comment

2013 in numbers

This was 2013 in numbers, from a blogging perspective:

1 visitor came from Vatican City

2 visitors saw my last blog post of 2013 in 2013

2 visitors seem to work a BNP Paribas Fortis (wordpress.com.catcoaching.adminproxy.bnpparibas.intra)

12 posts were migrated from my opera

21 posts were written

30 visitors were referred to my blog via Reddit

155 visitors used the same search term “windows update cannot currently check for updates because the service is not running”

365 visitors were compatriots

398 visitors did not use google as search engine

2076 visitors clicked on a link to blackviper.com

3703 page views were generated in May

8379 visitors came from the United States

12.137 visitors had all their Windows Services Disabled

13.943 search terms were unknown thanks to encrypted search engines

24.953 visitors found my blog via a search engine

29.870 page views were generated in 2013


1 Comment

Java Performance with JaPe

One of the hot topics at a client I’m working is “performance”: everything has to be super fast, response times must be super low while the applications are supposed to create unicorns that shit rainbows at the click of a button. When an application is slow, we usually look at the following aspects:

  • Slow web services
  • Memory and garbage collection
  • Anything database related
  • Filesystem interactions

And usually we dig deep using tools like Dynatrace to analyze the performance (or the lack of).

(c) Dilbert.com

What we usually forget is that behind all these web services, database calls etc… is just a lot of Java code. We all now how to achieve high performance on an architectural level, but what if we go a level lower ? What’s the fastest way to do for-loops ? Which Java Collection is the fastest ? Nobody seems to know 8O  .

That’s why I wrote JaPe, a simple Java Performance benchmark. It’s a simple Java benchmark program I wrote to test some commonly used implementation of java.util.Collectionjava.util.Map and some other common things like String concatenation and the differences between primitives and their object counterparts. An hour of coding I thought, I couldn’t be more wrong (ps. if you’re just interested in results and answers, then scroll down to 1/4 of this post).

Pitfalls

While writing this little benchmark I encountered several pitfalls which would either have a positive or negative influence, rendering the results and my benchmark useless.

Garbage Collection

One of the great aspects of Java is that you don’t have to clean up; the Garbage Collector will make sure that all non-referenced objects are removed from memory sooner or later. The downside is that you, as a developer, have nearly no control over this garbage collector, it will run when it has to and nothing will prevent it from running while JaPe is performing it’s tests. I decided that this is not a bad thing, since garbage collection is a part of the Java platform and trying to exclude it from the benchmarks would be like cheating. After each test (and sometimes even more often) I would call the GC myself to make sure that each test starts with a clean heap.

All tests are performed with the following memory arguments: -Xms768m -Xmx768m -Xmn736m -XX:PermSize=16m -XX:MaxPermSize=128m -XX:SurvivorRatio=64 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -Xloggc:gc.log

For those who don’t understand them:

  • Xms: initial heap size
  • Xmx: maximum heap size
  • Xmx: new generation size
  • XX:PermSize: initial permanent generation size
  • XX:MaxPermSize: maximum permanent generation size
  • XX:SurvivorRatio: ratio new generation/survivor spaces
  • PrintGC: print GC details
  • PrintGCDetails: more verbose GC info
  • PrintGCTimeStamps: add a timestamp to the GC info
  • UseConcMarkSweepGC: use the concurrent mark sweep collector
  • Xloggc: dump all GC info to a file instead of printing it the sysout

The survivor spaces and old generation are kept extremely small since no data is persisted and promotion to tenured is nearly non-existent during the benchmark. The following screenshot shows the memory usage of the JaPe benchmark. During the complete lifecycle of the benchmark, almost no data is kept in-memory. The 42 seconds of Garbage Collection are mostly due to explicit calls to System.gc() which happen outside the tests and have no influence on the results.

Memory Using During JaPe Benchmark (1=sleep, 2=warm-up, 3=tests, 4=export Excel)

Memory Using During JaPe Benchmark (1=sleep, 2=warm-up, 3=tests, 4=export Excel)

Bad Timers

In my first attempt I used System.nanoTime() to measure the time needed to execute each test-method, and I would use this 100.000 times. I quickly discovered that this method is not very precise and calling it this many times introduced at least some degree of error in my results. When running the following snippet before each test, I got averages between 1500 ns and 2500ns ! Repeating this 100.000 give me a random offset between 0 and 100ms which is huge on a test that would only take 40ms to complete it’s 100.000 iterations.

long nanos = 0;
long start;
for (int i = 0; i < 10000; ++i) {
	start = System.nanoTime();
	nanos += (System.nanoTime() - start);
}
double precision = nanos / 10000.0;

The following bug gives a bit more info about the nanoseconds problem: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440250

After discovering the limitations of the nanosecond, I decided to measure the total execution time in milliseconds of each test-method . This way I would also measure the time needed to process the for-loop, but this offset is the same for each test and can thus be ignored. In order to improve the accuracy, I also repeated certain operations 40 times to make sure the total time would at least exceed 1ms.

To further improve the accuracy I did the following steps:

  • Sleep the main thread so the JVM can finish it’s initial work
  • Call System.runFinalization() to make sure the JVM is ready (as suggested in bug-id 6440250)
  • Pre-run each test to make sure all classes are loaded

Runtime Optimizations

This was probably one of the more difficult issues and solving it involved writing a custom ClassLoader; Java seems to optimize itself at runtime and somehow it managed to make the same Boolean-test run 10-100x faster during the JVM’s lifetime !

Turns out you can bypass this behavior by unloading the test-classes. To make sure this happens, all classes in the be.pw999.jape package are loaded and cached in a separate classloader, while all other classes are loaded using the sun.misc.Launcher$AppClassLoader. Once all tests are finished, the classloader’s cache is cleared, all remaining objects are nullified and a call to System.gc() is all that’s left to unload all classes and the JVM is ready again to re-run each test with a different initial size.

Class unloading between two tests clearly visible in JConsole

Class unloading between two tests clearly visible in JConsole

The Benchmark

Very simply put, this is what JaPe does, described in some pseudo-code-like language:

JaPe {
	for (TestClass clazz : testClasses) {
		Test test = JaPeClassLoader.getClass(clazz).newInstance();
		test.initialize();	//test-object
		for (TestMethod method : test) {
			long totalExecutionTime = 0;

			if (canRunIfinitely(method)) {	//Method does not need re-init of test-object
				long start = currentMillis();
				for(0..LOOPS) {
					invokeMethod(test, method);
				}
				totalExecutionTime += (currentMillis() - start);
			} else {
				int limit = getLimit(method);	//How often it can run before test-object must re-initialize
				int executions = LOOPS / limit;
				int leftOvers = LOOPS % limit; // LOOPS = (executions * limit) + leftOvers
				for (0..executions) {
					long start = currentMillis();
					for (0..limit) {
						invokeMethod(test, method);
					}
					totalExecutionTime += (currentMillis() - start);
					test.initialize();
					doGarbageCollectionFromTimeToTime();
				}
				long start = currentMillis();
				for(0..leftOvers) {
					invokeMethod(test, method);
				}
				totalExecutionTime += (currentMillis() - start);
			}

			if (dirtiesTestObject(method)) {
				test.initialize();
			}

		}
		test.destroy();
		doGarbageCollection();
	}
}

For the subjects I wanted to test, a test-class was created. Such test-class is an implementations of the ITest interface and a good example would be the AbstractCollectionTest . Each test-class has several test-methods and each test-method is invoked 100.000 times. The total execution to invoke each test-method 100.000 will be recorded and this is the value shown in the charts.

During the initialization phase, object can be initialized with a given size, in the results here-under, these initial sizes were 1024 and 4096. A Collection for example would be initialized to contain 1024 items after which test would be executed against this Collection. During a second iteration, this Collection would be initialized to contain 4096 items.

All the test-classes  run inside a separate scope, with their own classloader which is garbage collected after all tests have ended:

try {
	JaPeClassLoader classLoader = new JaPeClassLoader(log.getClass().getClassLoader(), new URL[]{new File("./").toURI().toURL()});
	{
	    Class<!--?--> runnerClazz = classLoader.loadClass("be.pw999.jape.TestRunner");
	    Class<!--?--> settingsClass = classLoader.loadClass("be.pw999.jape.constants.Settings");
	    settingsClass.getDeclaredField("LIST_SIZE").setInt(null, Settings.LIST_SIZE * Double.valueOf(Math.pow(4.0, k)).intValue());

	    Object runner = runnerClazz.newInstance();
	    Method m = runnerClazz.getMethod("run");
	    m.invoke(runner);
	    //runner.run(args);
	    m = null;
	    runner = null;
	}
	classLoader.clear();
} catch (... lot's of exceptions here)

}
GCManager.forceGC();

The Results

Collections

Iterating

The following charts show the total execution time needed to iterate different Java collections containing either 1024 or 4096 items. The charts contain implementations of java.util.Collection and java.util.List, the latter having more methods and thus more results. For comparison, a String-array was also tested. The following code quickly explains each test:

//Convert to array and (For loop by index with cached length)
String[] array = read.toArray(new String[0]);
int l = array.length;
for (int i = 0; i < l; ++i) {
    z = array[i];
}

//For loop by index
for (int i = 0; i < read.size(); ++i) {
    z = read.get(i);
}

//For loop by index with cached length
int l = read.size();
for (int i = 0; i < l; ++i) {
    z = read.get(i);
}

//For loop enhanced
for (String s : read) {
    z = s;
}

//Iterate with iterator
Iterator it = read.iterator();
while (it.hasNext()) {
    z = it.next();
}

And the results are:

Execution time for iterating different Java Collection with 1024 items

Execution time for iterating different Java Collection with 1024 items

Execution time for iterating different Java Collection with 4096 items

Execution time for iterating different Java Collection with 4096 items

The first thing to notice is how fast arrays are. The second thing to notice is how slow the LinkedList implementation is when iterating by index. I would have to multiply the scale by 8 to make it fit on the charts !

In general, based on these results, the fastest way to loop a collection is:

  • If possible: use a simple array
  • Implementation of java.util.Set: use enhanced for-loop
  • Implementation of java.util.Collection: convert to array, and loop it by using: int i = 0; i < l; ++i

Other functions

The following chart shows some other, often used, functionalities of java.util.Collection and java.Util.List.

Common Java Collection functions on collections with 1024 items

Common Java Collection functions on collections with 1024 items

Common Java Collection functions on collections with 4096 items

Common Java Collection functions on collections with 4096 items

A bit surprising, but not really, is that Sets perform better when removing an object by reference, probably because they’ve already calculated the hashcode of every object in the set.

Maps

Iterating

Everybody knows you should iterate a java.util.Map via it’s Entry-Set, but how much slower is it when you don’t ? The following tests were executed on a Map with 1024 and 4096 items.

//Loop map via key look-up using iterator"
Iterator it = read.keySet().iterator();
while (it.hasNext()) {
    z = read.get(it.next());
}

//Loop map via key look-up using enhanced for-loop
for (String s : read.keySet()) {
    z = read.get(s);
}

//Loop map via entrySet using iterator
Set<Map.Entry<String, Double>> set = read.entrySet();
Iterator<Map.Entry<String, Double>> it = set.iterator();
while (it.hasNext()) {
    z = it.next().getValue();
}

//Loop map via entrySet using enhanced for-loop
Set<Map.Entry<String, Double>> set = read.entrySet();
for (Map.Entry<String, Double> s : set) {
    z = s.getValue();
}

And the results are:

Iterating Java maps with 1024 values

Iterating Java maps with 1024 values

Iterating Java maps with 4096 values

Iterating Java maps with 4096 values

I think it’s safe to say that looping a Map via it’s KeySet is a bad idea. In the most ideal case, this needs 50% more time to complete. The worst-case scenario (TreeMap) was 13,6x times slower ! It went completely off-scale…

In general, it doesn’t seem to matter if you use an Iterator or an enhanced for-loop, the differences are small enough to say that both methods are equally fast.

Other functions

The following chart shows some other, often used, functionalities of java.util.Map.

Common Java Map functions on maps with 1024 items

Common Java Map functions on maps with 1024 items

Common Java Map functions on maps with 4096 items

Common Java Map functions on maps with 4096 items

Not much to say here, unless you really bother discussing a difference of 100 milliseconds over 100.000 iterations ;) .

Strings

String concatenation is often considered to be slow and preferably done using a StringBuilder or StringBuffer. To test this I concatenated a whitespace character to an existing String and this 100.000 times.

String concatenation and toString() on 1024 chars

String concatenation and toString() on 1024 chars

String concatenation and toString() on 4096 chars

String concatenation and toString() on 4096 chars

Concatenating Strings with the + operator is indeed a lot slower compared to using a StringBuffer or StringBuilder. Doing 100.000 String concatenation with the + operator is roughly 1900 times slower compared to a properly initialized StringBuffer or StringBuilder.

The toString() method on the StringBuilder and StringBuffer seem extremely slow, but you have to consider that the time shown in the charts is the time needed to call the toString() method 100.000 times.

Numerics

What is faster, Numeric implementations or primitives ?

Three difference test were executed for addition, subtraction, multiplication and division of numerics and this for integers and double:

  • with primitives: only using primitives
  • with instanceof objects: release on Integer.valueOf(..) and Double.valueOf(..) to aquire the Numeric implementation
  • with fixed objects: uses Numeric objects declared and initialized on class level

These test are not influenced by the initial capacity (1024 or 4096), but I’m showing both results anyway, just to show that they are nearly identical :mrgreen: .

Numerics tests (1024)

Numerics tests (1024)

Numerics tests (4096)

Numerics tests (4096)

The results are obvious: primitives are a lot faster, even when caching the Numeric object it’s still a lost faster. Calling the instanceOf() method is clearly a lot slower and should be avoided if possible.

Booleans

Which is faster Boolean b = != Boolean.TRUE or boolean b = !false;

These test are not influenced by the initial capacity (1024 or 4096), but I’m showing both results anyway, just to show that these are also nearly identical :mrgreen: .

Inverting a boolean (1024)

Inverting a boolean (1024)

Inverting a boolean (4096)

Inverting a boolean (4096)

Pretty neat huh, inverting a Boolean is twice as slow as inverting a boolean.

Looping

What’s the fastest way to do a for-loop ? The loops will run from 0 to the initial size (1024 or 4096) and this 100.000 times.

Looping from 0 to 1024

Looping from 0 to 1024

Looping from 0 to 4096

Looping from 0 to 4096

We’re talking about a small difference, but it seems like < is a tad slower than <= whereas ++i and i++ doesn’t seem to change a thing: so do whatever suits your needs :)

For the record, all tests were executed on a Dell Inspiron 6400 with Linux Mint installed on it and the performance governor was loaded:

 INFO | 27/12 13:05:24 | TestRunner | ************************************************************************
 INFO | 27/12 13:05:24 | TestRunner | *  Initial object size:       4096                                     *
 INFO | 27/12 13:05:24 | TestRunner | *  Ms time precision:         1ms                                      *
 INFO | 27/12 13:05:24 | TestRunner | *  Number of loops:           100000 (Integer.MAX_VALUE/21474)         *
 INFO | 27/12 13:05:24 | TestRunner | * CPU Mhz:                    1600                                     *
 INFO | 27/12 13:05:24 | TestRunner | * CPU Model:                  Core(TM)2 CPU         T5200  @ 1.60GHz   *
 INFO | 27/12 13:05:24 | TestRunner | * CPU Vendor:                 Intel                                    *
 INFO | 27/12 13:05:24 | TestRunner | * Input args:                 -Xms768m -Xmx768m -Xmn736m -XX:PermSize=16m -XX:MaxPermSize=128m -XX:SurvivorRatio=64 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -Xloggc:gc.log -Dfile.encoding=UTF-8 *
 INFO | 27/12 13:05:24 | TestRunner | * Java Arch DM:               32                                       *
 INFO | 27/12 13:05:24 | TestRunner | * Java Vendor:                Oracle Corporation                       *
 INFO | 27/12 13:05:24 | TestRunner | * Java Version:               1.7.0_09                                 *
 INFO | 27/12 13:05:24 | TestRunner | * Max CMS Old Gen (mxb):      32Mb                                     *
 INFO | 27/12 13:05:24 | TestRunner | * Max CMS Perm Gen (mxb):     128Mb                                    *
 INFO | 27/12 13:05:24 | TestRunner | * Max Code Cache (mxb):       32Mb                                     *
 INFO | 27/12 13:05:24 | TestRunner | * Max Mem (runtime):          756Mb                                    *
 INFO | 27/12 13:05:24 | TestRunner | * Max Par Eden Space (mxb):   713Mb                                    *
 INFO | 27/12 13:05:24 | TestRunner | * Max Par Survivor Space (mxb):11Mb                                    *
 INFO | 27/12 13:05:24 | TestRunner | * OS Arch:                    i386                                     *
 INFO | 27/12 13:05:24 | TestRunner | * OS Name:                    Linux                                    *
 INFO | 27/12 13:05:24 | TestRunner | * OS Version:                 3.5.0-17-generic                         *
 INFO | 27/12 13:05:24 | TestRunner | ************************************************************************

The complete output can be found on BitBucket.

Small disclaimer: I’m not a benchmark/performance ‘expert’/’professional’, I don’t claim to be one either. I’m just a guy who likes developing and JaPe was definitely a good challenge. JaPe is open-source licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 2.0 Belgium License.

Spring Logo


8 Comments

Spring Core 3.2 Certification Tips

Last week I passed my Spring Core 3.2 exam with a score of 92%. The goal of this post is to give some tips & tricks on how I managed to pass the exam that initially looked impossible for me to pass :)

The training

The Spring Core training is a mandatory training prior to the exam. I followed the training somewhere in the beginning of this year, received my exam voucher a month later after requesting it and did the exam in December (yes, I’m a procrastinator). Looking back at the training I did have the feeling that it was useful to get myself started with Spring and to have a clear understanding of the different types of configurations. The labs you get during the training are extremely simple and you get way too much time to finish them.

While studying for the exam I felt as if the training lacked quite some details which became clear when I attempted to pass the mock exams.

The preparation

During my first attempt to study for the exam I did write code that would reflect what I just learned from a chapter. Don’t do this ! It’s a waste of time as you simply can not develop everything that’s in the book.

My second attempt involved a more theoretical approach. I re-read the Spring book, a few chapters per day and I tried to summarize everything, especially paying attentions to all Spring-specific beans. I finished a few chapters but a lack of time was another excuse to procrastinate the exam.

My third attempt started began somewhere in December, yet again I started reading the book without taking notes which is such an utterly boring thing to do … more procrastination !

My last attempt to study for the exam was a good one ! This time I had some help from the internet:

The sources

Info

Spring Study Notes

This is just a site with some general information and many links to useful resources. It’s a bit outdated since Knowledge BlackbeltFactory has stopped a while ago :( .

jeanne’s core spring 3 certification experiences

A must read, it won’t help you pass the exam, but it’s definitely interesting to read. Her study notes are okay, but there’s a better one available.

Study Notes

Arnošt Havelka his Spring Core 3.2 Study Notes  are probably the best ones available on the internet. These study notes helped me a lot and are a must have. I re-read the study notes before taking the exam, something you can’t do with the book. I did add some extra notes and remarks in his notes, mostly based on questions from the mock exams which I couldn’t reply to correctly.

Jeanne’s study notes are okay, but in the end I did not use them.

Spring Cert study notes  are good too. I did not use them, but reading them won’t do any harm.

Mock exams

Core Spring 3.0 Certification Mock Exam : this is a fairly easy mock exam, maybe slightly more easy than the real one. The first time I had 61% (I was ill at the time) and the second time I scored a nice 84%

Spring Sample Question : I read them once, not interesting at all

Skill Guru Core Spring Mock exams: just buy them ! There are tons of useful information in these mocks and I wouldn’t have passed without them. They are however extremely difficult and even after getting 84% on the Core Spring 3.0 Certification Mock Exam I only managed to get ~63% on them. Many question are out of scope so don’t expect to get more than 85% unless you know the complete Spring Core reference manual.

Mock exam from Developer Book: I read it once, not interesting at all.

This zip at the end of this blog post: this zip contains a Knowledge BlackbeltFactory mock exam and several Skill Guru mock exams (the answer sheets don’t match the question sheets, that’s why it’s better to buy them). The Knowledge BlackbeltFactory exam is a good one. I scored 65% on this exam after which I re-studies everything.

The exam

Prior to the exam I re-read Arnošt’s study notes and some mock exams. After registering myself with two proofs of identity (ID-card and drivers license) and putting all my belongings in a locker I was allowed to start the exam. I can’t tell you a lot about the exam since you have sign a NDA, but there’s just one thing I’d like you to know (in spite of the things you’ll read on the internet):

  • There are a lot of multiple choice questions with only one correct answer and it’s obvious because of the radio buttons :P
  • There are few multiple choice question with one or more correct answers

That’s why the mock exams are not representative: these mock exams have mostly multiple choice questions with one or more answer which is extremely difficult.


Leave a comment

Google Talk fat client refuses to start

A while ago I noticed that my Google Talk fat client didn’t want to start anymore, in fact, it did absolutely nothing. Even after reinstalling and completely removing all the caches, remaining files and registry keys, the application still wouldn’t start at all.

Google’ing for some help only resulted in more people having the same problem without a solution at all. In this post I got my first clue about the problem: FAST IO DISALLOWED.

These three words actually tell everything:
FAST IO: Google Talk is doing something special with it’s I/O’s
DISALLOWD: Windows doesn’t like Google doing this and thus refuses this action

So we have to digg a bit deeper in the (new) security features of Windows 7. As you may or may not know, Windows 7 comes with some additional security features like Address Space Layout Randomization and Structured Exception Hanlder Overwrite Protection. However, by default, these security features are not enforced to ensure a certain backwards compatibility with older applications.

Microsoft EMET

As I am and always will be a geek I have installed the Microsoft Enhanced Mitigation Experience Toolkit (EMET) which allows us to change this “opt-in behaviour” to an “opt-out behaviour”. As I’m also a bit paranoia I had configured EMET to force the “opt-out behaviour”.

Just to test it I had reverted the settings to default and after a reboot I quickly got the Google Talk window on my screen.

So, if your Google Talk fat client doesn’t start on Windows 7 then you should definately check your EMET settings.

This post was originally posted on my My.Opera blog on Thursday, February 16, 2012 6:26:15 PM. This post has been copied to my WordPress blog since the My.Opera blogging service will be discontinued.

Follow

Get every new post delivered to your Inbox.

Join 25 other followers