Re: Stand alone usage - early exit of application
Hello, The use case is different. I have an eclipse project. Within eclipse IDE I use IvyDE. However during development sometimes I want to start my application outside of IDE (due to Eclipse performance issues). I do it by a batch file (Windows). From documentation I saw that it is possible to use Ivy not only as part of the build but also as the application launcher from a batch file. See the link to Ivy doc bellow. http://ant.apache.org/ivy/history/2.0.0/standalone.html So I wrote a batch file which starts my application using Ivy launcher which offers great possibility to resolve all dependencies at the moment of start using the same ivy.xml . * **java -jar ivy-2.0.4.jar -ivy ivy.xml -confs default -main com.my.MainClass -cp .\classes* However I noticed that my application stared using Ivy launcher terminates prematurely. I looked at the source code of Ivy launcher, and i noticed that the launcher starts the application using specified class and its main method, however as soon as the main of the called class ends Ivy launcher *calls System.exit() which terminates the VM.* My application is a mulch-threaded server an *my main method just sets up and starts up the application and exits.**The application lives as long as the last non-daemon thread terminates. ** ** *The assumption made by Ive designers/developers that each application should terminate as soon as when its main terminates is wrong. In Java the application terminates when its last non-daemon thread stops. In present version using Ivy as an application launcher is not possible because*it just kills the VM much too early*. See the source code from Ivy launcher (this comes from sources of Ivy: *org.apache.ivy.Main*). *In bold you can see the problematic line of code which kill s the VM.* *I believe that it could be removed making Ivy launcher usable.* public static void main(String[] args) throws Exception { CommandLineParser parser = getParser(); try { run(parser, args); *System.exit(0); * } catch (ParseException ex) { System.err.println(ex.getMessage()); usage(parser, false); System.exit(1); } } I would appreciate if this could be fixed. Best regards and greetings.
Re: Stand alone usage - early exit of application
If I understand it correctly, you are embedding Ivy within your application and using the Main class as the starting point to embed Ivy? I don't know if the Main class is meant to be used in that way. -Jaikiran On Friday 17 July 2015 01:24 PM, Krzysztof Harpula wrote: Hi, I am starting to use Ivy. I wanted to create a batch file which launches my application using stand alone ivy launcher. I noticed that my application starts and then immediately terminates. I checked the sources of Ivy launcher and I van see the following piece of code: public static void main(String[] args) throws Exception { CommandLineParser parser = getParser(); try { run(parser, args); System.exit(0); } catch (ParseException ex) { System.err.println(ex.getMessage()); usage(parser, false); System.exit(1); } } The reason of early exit of application is the call to System.exit(0). It does not seem to make any sense here. I try to start a server application where the main thread just starts all up and then it dies. The rest is controlled by IO threads listening on sockets. The application ends when last non daemon thread exits. With present implementation of Ivy launcher, I can not use it because it effectively kills my application. Could you please fix it?