Using jrebel to stop waiting for redeploying

Hi all,

One of the most time consuming task when programming with dhis2 is waiting for redeploying. When a small change on java code must take few minutes for jvm to reload the context, coding becomes very arduous task, especially building portal with a large number of modules.

I have tried JRebel and it is a big surprise to me. Going beyond what the company (ZeroTurnaround) advertises, JRebel is really rocks: Java code change effects immediately, so do *.vm, js, css; super easy to getting start (please see my tutorial below); and its completely free if you join their social license, a license that integrates with Facebook so that JRebel can post few message on your behalf claiming how much time you can save using JRebel. Don’t worry this posting is so rare, once a week or month.

Steps to start DHIS2 with JRebel.

  1. Follow the following tutorial to register the license (it is just a hashed string, you copy and paste into your license activation step)

http://zeroturnaround.com/software/jrebel/jrebel-social-tutorial/

  1. Now steps to configure JRebel with dhis2. I know most of dhis2 developers use Maven instead of IDE to build. Documents on how to run JRebel with Maven is a bit scarce however there is a few. This is a good one.

http://padcom13.blogspot.com/2011/09/using-jrebel-from-pure-maven-in-web.html

**Remember:

  1. In the pom.xml, you need to set the maven jrebel plugin, i.e.**

org.zeroturnaround

jrebel-maven-plugin

generate-rebel-xml

process-resources

generate

  1. In the environmental variables, set MAVEN_OPTS to have javaagent which points to the folder of jrebel.

My MAVEN_OPTS as I extracted jrebel in C:/

image

  1. Then use mvn jetty:run and enjoy autoredeploy of JRebel. Now all the changes on classes and webapp will be watched and redeployed. Therefore, in your IDE you must set on Build Automatically so that every change on source will be compiled to classes.

Note that dont use **maven jetty:**run-war as Jrebel will watch changes on target/classes and it is not what we want.

It might require several rounds of configuration until JRebel get run but the result is so rewarded. Let me know if you have any issues.

Thanh

Hey Thanh,

Perfect timing since I’ve been doing the same over the last night… trying to run DHIS2 with JRebel and Maven!

There is some problem with spring security and I have to disable the jrebel-spring-plugin with -Debel.spring_plugin=false when starting maven.

There is also the following that I’m stuck at the moment.

Following is an exception that I am getting:

Unable to load configuration. - package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)

at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)

at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:193)

at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)

at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)

at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)

at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)

at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)

at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)

at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)

at org.mortbay.jetty.Server.doStart(Server.java:224)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)

at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:454)

at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:396)

at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)

at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)

at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)

at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)

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:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

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: The package name ‘dhis-web-maintenance-user’ at location package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123 is already been used by another package at location package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml:9:123 - package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.addPackageConfig(DefaultConfiguration.java:150)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:494)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:278)

at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:230)

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)

... 46 more

To which pom.xml are you adding the jrebel plugin to the build?

to dhis-web-portal or dhis-web, so that all projects get the rebel.xml?

PS: You can always hide the posting to your facebook profile when giving the application permissions make it to Only me!! :smiley:

image

···

Regards,
Saptarshi PURKAYASTHA

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

On 19 February 2013 04:55, Ngoc Thanh Nguyen thanh.hispvietnam@gmail.com wrote:

Hi all,

One of the most time consuming task when programming with dhis2 is waiting for redeploying. When a small change on java code must take few minutes for jvm to reload the context, coding becomes very arduous task, especially building portal with a large number of modules.

I have tried JRebel and it is a big surprise to me. Going beyond what the company (ZeroTurnaround) advertises, JRebel is really rocks: Java code change effects immediately, so do *.vm, js, css; super easy to getting start (please see my tutorial below); and its completely free if you join their social license, a license that integrates with Facebook so that JRebel can post few message on your behalf claiming how much time you can save using JRebel. Don’t worry this posting is so rare, once a week or month.

Steps to start DHIS2 with JRebel.

  1. Follow the following tutorial to register the license (it is just a hashed string, you copy and paste into your license activation step)

http://zeroturnaround.com/software/jrebel/jrebel-social-tutorial/

  1. Now steps to configure JRebel with dhis2. I know most of dhis2 developers use Maven instead of IDE to build. Documents on how to run JRebel with Maven is a bit scarce however there is a few. This is a good one.

http://padcom13.blogspot.com/2011/09/using-jrebel-from-pure-maven-in-web.html

**Remember:

  1. In the pom.xml, you need to set the maven jrebel plugin, i.e.**

org.zeroturnaround

jrebel-maven-plugin

generate-rebel-xml

process-resources

generate

  1. In the environmental variables, set MAVEN_OPTS to have javaagent which points to the folder of jrebel.

My MAVEN_OPTS as I extracted jrebel in C:/

Inline image 1

  1. Then use mvn jetty:run and enjoy autoredeploy of JRebel. Now all the changes on classes and webapp will be watched and redeployed. Therefore, in your IDE you must set on Build Automatically so that every change on source will be compiled to classes.

Note that dont use **maven jetty:**run-war as Jrebel will watch changes on target/classes and it is not what we want.

It might require several rounds of configuration until JRebel get run but the result is so rewarded. Let me know if you have any issues.

Thanh


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

I solved that issue just now after posting…

Thanks Thanh, your post helped a lot!!

I was using the following:

org.zeroturnaround

jrebel-maven-plugin

1.1.3

true

true

true

generate-rebel-xml

process-resources

generate

the … was the problem. Once I removed that it works fine.

By the way, you forgot to mention that if using the command-line run mvn compile after making changes to Java files for it to be reloaded by JRebel.

Unless you are using Netbeans and its awesome compile on save feature :wink: … I’m also using the Netbeans jrebel plugin, which integrated nicely with Run/debug and a button to switch on/switch off Jrebel monitoring.

image

···

Regards,
Saptarshi PURKAYASTHA

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 19 February 2013 05:25, Saptarshi Purkayastha sunbiz@gmail.com wrote:

Hey Thanh,

Perfect timing since I’ve been doing the same over the last night… trying to run DHIS2 with JRebel and Maven!

There is some problem with spring security and I have to disable the jrebel-spring-plugin with -Debel.spring_plugin=false when starting maven.

There is also the following that I’m stuck at the moment.

Following is an exception that I am getting:

Unable to load configuration. - package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)

at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)

at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:193)

at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)

at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)

at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)

at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)

at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)

at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)

at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)

at org.mortbay.jetty.Server.doStart(Server.java:224)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)

at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:454)

at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:396)

at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)

at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)

at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)

at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)

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:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

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: The package name ‘dhis-web-maintenance-user’ at location package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123 is already been used by another package at location package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml:9:123 - package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.addPackageConfig(DefaultConfiguration.java:150)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:494)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:278)

at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:230)

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)

… 46 more

To which pom.xml are you adding the jrebel plugin to the build?

to dhis-web-portal or dhis-web, so that all projects get the rebel.xml?

PS: You can always hide the posting to your facebook profile when giving the application permissions make it to Only me!! :smiley:


Regards,
Saptarshi PURKAYASTHA

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

On 19 February 2013 04:55, Ngoc Thanh Nguyen thanh.hispvietnam@gmail.com wrote:

Hi all,

One of the most time consuming task when programming with dhis2 is waiting for redeploying. When a small change on java code must take few minutes for jvm to reload the context, coding becomes very arduous task, especially building portal with a large number of modules.

I have tried JRebel and it is a big surprise to me. Going beyond what the company (ZeroTurnaround) advertises, JRebel is really rocks: Java code change effects immediately, so do *.vm, js, css; super easy to getting start (please see my tutorial below); and its completely free if you join their social license, a license that integrates with Facebook so that JRebel can post few message on your behalf claiming how much time you can save using JRebel. Don’t worry this posting is so rare, once a week or month.

Steps to start DHIS2 with JRebel.

  1. Follow the following tutorial to register the license (it is just a hashed string, you copy and paste into your license activation step)

http://zeroturnaround.com/software/jrebel/jrebel-social-tutorial/

  1. Now steps to configure JRebel with dhis2. I know most of dhis2 developers use Maven instead of IDE to build. Documents on how to run JRebel with Maven is a bit scarce however there is a few. This is a good one.

http://padcom13.blogspot.com/2011/09/using-jrebel-from-pure-maven-in-web.html

**Remember:

  1. In the pom.xml, you need to set the maven jrebel plugin, i.e.**

org.zeroturnaround

jrebel-maven-plugin

generate-rebel-xml

process-resources

generate

  1. In the environmental variables, set MAVEN_OPTS to have javaagent which points to the folder of jrebel.

My MAVEN_OPTS as I extracted jrebel in C:/

Inline image 1

  1. Then use mvn jetty:run and enjoy autoredeploy of JRebel. Now all the changes on classes and webapp will be watched and redeployed. Therefore, in your IDE you must set on Build Automatically so that every change on source will be compiled to classes.

Note that dont use **maven jetty:**run-war as Jrebel will watch changes on target/classes and it is not what we want.

It might require several rounds of configuration until JRebel get run but the result is so rewarded. Let me know if you have any issues.

Thanh


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Hi Sapstarshi,

Glad to hear that you solved the problem in few minutes. Thanks for the tips of hiding jrebel message on facebook. Well, one message a week won’t be a problem, right? Regarding the auto detect of the change on classes folder when you click Save on our IDE, I am using Eclipse and the Project/Automatically build works fine. I am suing Netbean for a while but have to quit it as it is too slow (given that in Eclipse you must disable all the unnecessary plugins).

Only when you use mvn jetty:run-war then you probably have to run mvn compile (in a separate command line of course) but it takes quite some time to reload the context because Jrebel reload all the classes (it notices the changes of all classes).

Thanh

Eclipse screen for auto build:

image

image

···

On Tue, Feb 19, 2013 at 11:25 AM, Saptarshi Purkayastha sunbiz@gmail.com wrote:

Hey Thanh,

Perfect timing since I’ve been doing the same over the last night… trying to run DHIS2 with JRebel and Maven!

There is some problem with spring security and I have to disable the jrebel-spring-plugin with -Debel.spring_plugin=false when starting maven.

There is also the following that I’m stuck at the moment.

Following is an exception that I am getting:

Unable to load configuration. - package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)

at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)

at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)

at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:193)

at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)

at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)

at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)

at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)

at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)

at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)

at org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)

at org.mortbay.jetty.Server.doStart(Server.java:224)

at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)

at org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)

at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:454)

at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:396)

at org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)

at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)

at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)

at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)

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:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:601)

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: The package name ‘dhis-web-maintenance-user’ at location package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123 is already been used by another package at location package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml:9:123 - package - file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.addPackageConfig(DefaultConfiguration.java:150)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:494)

at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:278)

at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)

at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:230)

at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)

… 46 more

To which pom.xml are you adding the jrebel plugin to the build?

to dhis-web-portal or dhis-web, so that all projects get the rebel.xml?

PS: You can always hide the posting to your facebook profile when giving the application permissions make it to Only me!! :smiley:


Regards,
Saptarshi PURKAYASTHA

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

On 19 February 2013 04:55, Ngoc Thanh Nguyen thanh.hispvietnam@gmail.com wrote:

Hi all,

One of the most time consuming task when programming with dhis2 is waiting for redeploying. When a small change on java code must take few minutes for jvm to reload the context, coding becomes very arduous task, especially building portal with a large number of modules.

I have tried JRebel and it is a big surprise to me. Going beyond what the company (ZeroTurnaround) advertises, JRebel is really rocks: Java code change effects immediately, so do *.vm, js, css; super easy to getting start (please see my tutorial below); and its completely free if you join their social license, a license that integrates with Facebook so that JRebel can post few message on your behalf claiming how much time you can save using JRebel. Don’t worry this posting is so rare, once a week or month.

Steps to start DHIS2 with JRebel.

  1. Follow the following tutorial to register the license (it is just a hashed string, you copy and paste into your license activation step)

http://zeroturnaround.com/software/jrebel/jrebel-social-tutorial/

  1. Now steps to configure JRebel with dhis2. I know most of dhis2 developers use Maven instead of IDE to build. Documents on how to run JRebel with Maven is a bit scarce however there is a few. This is a good one.

http://padcom13.blogspot.com/2011/09/using-jrebel-from-pure-maven-in-web.html

**Remember:

  1. In the pom.xml, you need to set the maven jrebel plugin, i.e.**

org.zeroturnaround

jrebel-maven-plugin

generate-rebel-xml

process-resources

generate

  1. In the environmental variables, set MAVEN_OPTS to have javaagent which points to the folder of jrebel.

My MAVEN_OPTS as I extracted jrebel in C:/

Inline image 1

  1. Then use mvn jetty:run and enjoy autoredeploy of JRebel. Now all the changes on classes and webapp will be watched and redeployed. Therefore, in your IDE you must set on Build Automatically so that every change on source will be compiled to classes.

Note that dont use **maven jetty:**run-war as Jrebel will watch changes on target/classes and it is not what we want.

It might require several rounds of configuration until JRebel get run but the result is so rewarded. Let me know if you have any issues.

Thanh


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp