Jesse you are correct. If you are compiling for one java version but running on another… you can get java.lang.NoClassDefFoundError - that’s because the object you used at compile time might not be available in that other runtime.
While the error is the same, this feels different but your point is a good one and I’ll consider it some more. AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/> e: aa...@chatnbike.com <mailto:aa...@chatnbike.com> t: (301) 956-2319 > On Jan 23, 2020, at 4:24 PM, Jesse Tayler <jtay...@oeinc.com> wrote: > > Isn’t that what you get with some java version mismatch ?? > >> On Jan 23, 2020, at 11:41 AM, Aaron Rosenzweig via Webobjects-dev >> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> >> wrote: >> >> I tried this call: >> >> NSBundle MYBUNDLE = NSBundle.mainBundle(); >> >> It fails immediately with: >> java.lang.NoClassDefFoundError: Could not initialize class >> com.webobjects.foundation.NSBundle >> >> I’m suspecting it has to do with the static initializer of NSBundle. >> AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/> >> e: aa...@chatnbike.com <mailto:aa...@chatnbike.com> t: (301) 956-2319 >> >> >> >>> On Jan 23, 2020, at 11:23 AM, Aaron Rosenzweig <aa...@chatnbike.com >>> <mailto:aa...@chatnbike.com>> wrote: >>> >>> Riddle me this… how can you get a class not defined error from the class >>> itself? >>> >>> java.lang.NoClassDefFoundError: Could not initialize class >>> com.webobjects.foundation.NSBundle >>> at com.webobjects.foundation.NSBundle.mainBundle(NSBundle.java:526) >>> >>> You are already in NSBundle.mainBundle() and then out pops a >>> NoClassDefFoundError… that must be a red herring but I cannot figure it >>> out. >>> AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/> >>> e: aa...@chatnbike.com <mailto:aa...@chatnbike.com> t: (301) 956-2319 >>> >>> >>> >>>> On Jan 23, 2020, at 10:03 AM, Aaron Rosenzweig <aa...@chatnbike.com >>>> <mailto:aa...@chatnbike.com>> wrote: >>>> >>>> Hi Dennis - I hadn’t thought of that - we could have a fast failsafe and >>>> then a slow one run at different times. Thanks! good idea. >>>> AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/> >>>> e: aa...@chatnbike.com <mailto:aa...@chatnbike.com> t: (301) 956-2319 >>>> >>>> >>>> >>>>> On Jan 23, 2020, at 9:58 AM, Dennis Scheffer <den...@selbstdenker.ag >>>>> <mailto:den...@selbstdenker.ag>> wrote: >>>>> >>>>> >>>>>> Cloning a “company” EO and testing unique constraints in SQL - is >>>>>> heavier than testing an “isCamelCase()” function but lighter than >>>>>> selenium. Maybe we have to do it in failsafe but it feels closer to >>>>>> regular unit tests that should fire every time there is a checkin to the >>>>>> repo. In other words if your tests take 5 minutes to run, why not let >>>>>> Agnes tell you immediately that the build is broken rather than waiting >>>>>> till midnight for selenium to do so? >>>>> >>>>> If there are multiple ways in which you would like to use the failsafe >>>>> plugin, you can always add multiple executions and put them in their own >>>>> build profiles >>>>> (https://maven.apache.org/guides/introduction/introduction-to-profiles.html >>>>> >>>>> <https://maven.apache.org/guides/introduction/introduction-to-profiles.html>). >>>>> Then you can fire failsafe every time you check in new code without >>>>> selenium and you can do something like this if your want selenium tests >>>>> to be run: 'mvn clean verify -P with-selenium'. There are a bunch of ways >>>>> to configure profiles to do something like that. >>>>> >>>>> -- >>>>> Dennis >>>>> >>>>>> On 23. Jan 2020, at 15:39, Aaron Rosenzweig <aa...@chatnbike.com >>>>>> <mailto:aa...@chatnbike.com>> wrote: >>>>>> >>>>>> Dennis that is a good point, >>>>>> >>>>>> At the moment I have not cleaned and the product is there but it’s not >>>>>> working but your point is still well taken. In Jenkins, in the cloud, it >>>>>> will do a clean and I really should be doing a clean every time so the >>>>>> product won’t be there to test with… there won’t be a bundle. >>>>>> >>>>>> Maven “Failsafe” makes sense for selenium… which is technically a JUnit >>>>>> test too but it’s very heavy and flexes the UI of a bundled and launched >>>>>> app. >>>>>> >>>>>> Cloning a “company” EO and testing unique constraints in SQL - is >>>>>> heavier than testing an “isCamelCase()” function but lighter than >>>>>> selenium. Maybe we have to do it in failsafe but it feels closer to >>>>>> regular unit tests that should fire every time there is a checkin to the >>>>>> repo. In other words if your tests take 5 minutes to run, why not let >>>>>> Agnes tell you immediately that the build is broken rather than waiting >>>>>> till midnight for selenium to do so? >>>>>> >>>>>> http://www.globalnerdy.com/wp-content/uploads/2008/08/you_broke_the_build.jpg >>>>>> >>>>>> <http://www.globalnerdy.com/wp-content/uploads/2008/08/you_broke_the_build.jpg> >>>>>> >>>>>> When we run from within Eclipse we have a “bundless build” that uses the >>>>>> Fluffy Bunny NSBundle variant and works great… without a product… and >>>>>> the destructive EOF unit tests work there. I think what Markus did was >>>>>> patch NSBundle to treat the maven target with the intermediate classes >>>>>> and resources as a “maven bundless build” or a “maven black-ops bunny” >>>>>> if-you-will. >>>>>> >>>>>> I’m still confused but clarity is setting in. Thank you everyone for >>>>>> this hearty discussion. >>>>>> AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/> >>>>>> e: aa...@chatnbike.com <mailto:aa...@chatnbike.com> t: (301) 956-2319 >>>>>> >>>>>> >>>>>> >>>>>>> On Jan 23, 2020, at 2:54 AM, Dennis Scheffer <den...@selbstdenker.ag >>>>>>> <mailto:den...@selbstdenker.ag>> wrote: >>>>>>> >>>>>>> Hi everyone, >>>>>>> >>>>>>> >>>>>>>> // That's the main bundle when running tests from Eclipse >>>>>>>> Path mainBundlePath = Paths.get("build/your-project.woa"); >>>>>>>> >>>>>>>> if (Files.notExists(mainBundlePath)) { >>>>>>>> // Maven doesn't create a build directory. The WOA bundle goes into >>>>>>>> the target folder instead. >>>>>>>> mainBundlePath = Paths.get("target/your-project.woa"); >>>>>>>> } >>>>>>>> >>>>>>>> ERXExtensions.initApp("your-project", mainBundlePath.toUri().toURL(), >>>>>>>> ACUnitTestingApplication.class, args); >>>>>>> >>>>>>> This may not work under certain circumstances because the surefire >>>>>>> plugin usually runs in the Maven 'test' phase which is before the >>>>>>> 'package' phase. Therefore, there may not be a bundle at >>>>>>> 'target/your-project.woa' – especially if you do a 'mvn clean test'. >>>>>>> >>>>>>> The solution is very simple: I would consider tests that depend on a >>>>>>> pre-build bundle integration tests (which makes sense because most of >>>>>>> the time all the application's 'units' are integrated in a bundle). And >>>>>>> just use the Maven failsafe pugin >>>>>>> (https://maven.apache.org/surefire/maven-failsafe-plugin/ >>>>>>> <https://maven.apache.org/surefire/maven-failsafe-plugin/>). It works >>>>>>> exactly the same as the surefire plugin but runs in the 'verify' phase >>>>>>> which is after the 'package' phase. So 'mvn clean verify' will clean >>>>>>> your target directory, create a fresh new bundle and run your tests on >>>>>>> your fresh bundle with the solution mentioned above. >>>>>>> >>>>>>> With regards, >>>>>>> -- >>>>>>> Dennis >>>>>>> >>>>>>> >>>>>>>> On 23. Jan 2020, at 02:28, Henrique Prange via Webobjects-dev >>>>>>>> <webobjects-dev@lists.apple.com >>>>>>>> <mailto:webobjects-dev@lists.apple.com>> wrote: >>>>>>>> >>>>>>>> Hey Aaron, >>>>>>>> >>>>>>>> This error rings a bell. I don't recall all the details. It looks like >>>>>>>> the collectMainProps method is trying to find the Properties file of >>>>>>>> your project in the wrong place. >>>>>>>> >>>>>>>> When you build your project in Eclipse with WOLips, it generates a >>>>>>>> build folder containing your project's WOA bundle. Maven, however, >>>>>>>> puts the generated WOA bundle in the target folder. I'm afraid the >>>>>>>> application initialization code keeps looking for the build folder >>>>>>>> when you run your tests with Maven. >>>>>>>> >>>>>>>> I'm not sure if there's a better way to solve this problem. Anyway, >>>>>>>> the code below may fix it. >>>>>>>> >>>>>>>> // That's the main bundle when running tests from Eclipse >>>>>>>> Path mainBundlePath = Paths.get("build/your-project.woa"); >>>>>>>> >>>>>>>> if (Files.notExists(mainBundlePath)) { >>>>>>>> // Maven doesn't create a build directory. The WOA bundle goes into >>>>>>>> the target folder instead. >>>>>>>> mainBundlePath = Paths.get("target/your-project.woa"); >>>>>>>> } >>>>>>>> >>>>>>>> ERXExtensions.initApp("your-project", mainBundlePath.toUri().toURL(), >>>>>>>> ACUnitTestingApplication.class, args); >>>>>>>> >>>>>>>> Cheers, >>>>>>>> >>>>>>>> HP >>>>>>>> >>>>>>>>> On Jan 22, 2020, at 2:09 PM, Aaron Rosenzweig via Webobjects-dev >>>>>>>>> <webobjects-dev@lists.apple.com >>>>>>>>> <mailto:webobjects-dev@lists.apple.com>> wrote: >>>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I’m trying to run maven unit tests with the surefire plugin that make >>>>>>>>> use of EOF but it’s not working out. >>>>>>>>> >>>>>>>>> I can run them in Eclipse with a direct launch as a bundless build >>>>>>>>> and it works. I make a call in the static initializer of the test >>>>>>>>> case to: >>>>>>>>> ERXExtensions.initApp(ACUnitTestingApplication.class, arguments); >>>>>>>>> >>>>>>>>> And it thinks it’s a WO app and has access to the model group and all >>>>>>>>> of EOF and I can do destructive stuff like creating and saving Eos to >>>>>>>>> the DB all inside a launch from Eclipse. >>>>>>>>> >>>>>>>>> Where I’m running into trouble is trying to do it with Maven. At the >>>>>>>>> moment I’m getting a null pointer from maven launch at the following >>>>>>>>> place. >>>>>>>>> >>>>>>>>> er.extensions.appserver.ERXApplication$Loader.collectMainProps(ERXApplication.java:757) >>>>>>>>> >>>>>>>>> I think because it is wanting to treat it as a bundle but it isn’t >>>>>>>>> and so… I’m not sure where to go from here. Any advice? >>>>>>>>> >>>>>>>>> AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/> >>>>>>>>> e: aa...@chatnbike.com <mailto:aa...@chatnbike.com> t: (301) >>>>>>>>> 956-2319 >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Do not post admin requests to the list. They will be ignored. >>>>>>>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com >>>>>>>>> <mailto:Webobjects-dev@lists.apple.com>) >>>>>>>>> Help/Unsubscribe/Update your Subscription: >>>>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/hprange%40gmail.com >>>>>>>>> >>>>>>>>> <https://lists.apple.com/mailman/options/webobjects-dev/hprange%40gmail.com> >>>>>>>>> >>>>>>>>> This email sent to hpra...@gmail.com <mailto:hpra...@gmail.com> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Do not post admin requests to the list. They will be ignored. >>>>>>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com >>>>>>>> <mailto:Webobjects-dev@lists.apple.com>) >>>>>>>> Help/Unsubscribe/Update your Subscription: >>>>>>>> https://lists.apple.com/mailman/options/webobjects-dev/dennis%40selbstdenker.ag >>>>>>>> >>>>>>>> <https://lists.apple.com/mailman/options/webobjects-dev/dennis%40selbstdenker.ag> >>>>>>>> >>>>>>>> This email sent to den...@selbstdenker.ag >>>>>>>> <mailto:den...@selbstdenker.ag> >>>>>> >>>>> >>>> >>> >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com >> <mailto:Webobjects-dev@lists.apple.com>) >> Help/Unsubscribe/Update your Subscription: >> https://lists.apple.com/mailman/options/webobjects-dev/jtayler%40oeinc.com >> <https://lists.apple.com/mailman/options/webobjects-dev/jtayler%40oeinc.com> >> >> This email sent to jtay...@oeinc.com >
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com