I would say that, now though Netbeans has surpassed Eclipse. In my personal opinion as of 6.5 and on it has become the best Java IDE available. While SWT was clearly superior at the time Eclipse was originally built, Swing has caught up. I made the switch to Netbeans on the recommendation of someone I respect a great deal, I used it a long time ago because it was the only IDE Blackberry buit is dev tools on and it was one of the most painful development experiences I have had to endure. I was hesitant when 6.5 came out and my friend urged me to give it a second change. I am glad I did now, they really got their act together. I hate that Oracle bought Sun as it seemed in the last few years they where really getting their technical act together. Netbeans became a superior IDE, Glassfish is a great simple to use app server, Their identity server was a great product, Virtual Box was a great desktop virtualization product. They where making strides but they just waited too long to turn the ship.
I couldn't disagree more. I think netbeans is the worst Java IDE out there and has a LONG way to go.
It depends on ant for everything. The build files are very difficult to read, so it's like a black box. They are also cruel enough to name the root file "build.xml" so it interferes with you trying to make a convenient IDE agnostic build script. It depends on netbeans specific libraries for copying files (WHY?!). It's very difficult to get it to build from the command line. If you check out the hudson tutorial on how to get a netbeans project building in their CI server, you have to run a headless version of netbeans on the box to do it.
Not only that, the build scripts do some really crazy black magic. You can edit parts of them and your changes get ignored. It's like netbeans generates them every time you try to run. This allows you to do things like put echo statements in the build scripts that don't get printed out even though the target runs. It's really confusing.
It is not very organized. If you go into the "Options", it has 5 big buttons at the top. Most things are in the "Miscellaneous" section.
The debugger and profiler are really slow. When I remote debug, I have to click "step over" two times for one line of code. Expanding objects in the variables tab takes an annoying amount of time. My app is apparently too big to even start with the profiler. I've waited over 25 minutes before giving up. In intellij, the jprofiler plugin lets me start the same project without any noticeable slowdown.
Many many UI problems. You can't work with multiple "run" configurations like you can in the other IDEs. EG: If you want to run a certain unit test, you have to find it, go into it, and then run it. In the other IDEs, you could save that unit test as something to run and run it while you're looking at another file.
Speaking of unit tests, there's no way to run an individual unit test. The finest granularity is the entire file.
It crashes all the time. You're going to have to accept my anecdotal evidence here, but everyone else in the office complains about this, too.
The list goes on and on. I'm extremely skeptical of anyone that claims netbeans is good. I suspect you're using it as a glorified text editor instead of an IDE.
It's not 100% terrible though. One thing that netbeans is good at is generating code. I haven't tried in Eclipse, but netbeans' webservice generation support is better than intellij's. It also has a good Swing WYSIWYG.
I suspect you're using it as a glorified text editor instead of an IDE
Your suspicions are unfounded, I have never had an issue with Netbeans builds or it rewriting my files. It is a pluggable build systems where the build.xml is a templated file that pulls in the files that you are supposed to edit such as build-imp.xml and project.properties. These files do not get overwritten. I suspect you are using the build system wrong.
Further I like that Ant is used for the build because it gives me a head start on something I would end up having to write anyways. The build file is generated when you create a project, it saves a lot of time and is standardized. As for the org-netbeans-modules-java-j2seproject-copylibstask.jar it is a jar, I don't find it to be a big deal to install it on the build machine given the amount of time saves having the default build and deploy script generated for me.
The build script gives you a starting point not and end solution for testing, custom build instruction and other build related stuff you have to put in your own files and plug them into the build not edit the build directly. I don't find it that difficult and I think it is offset by what netbeans does for you. Further, on the remote occasion that Netbeans wants to rebuild the build.xml file it always prompts you before it does so, but even with that, you should not be modifying the build.xml you should be creating your own build files and importing them into the build system. Netbeans does this so when you add stuff like web services, JAX-B generated classes, JPA change from Glassfish to WebSphere it can auto generate all of the build and deployment instruction for those items. For me having all of that boilerplate stuff generated is a huge time saver for only having to make the trade off of keeping my custom Ant instruction in a separate file and copying a jar to the build server.
As for Hudson I cannot comment, we use Cruise Control,
It is not very organized. If you go into the "Options", it has 5 big buttons at the top. Most things are in the "Miscellaneous" section.
Not a show stopper for me, I spend all of 45 minutes in there when I do a fresh install and then I never touch it again. It does not affect my day to day work. This is also a preference thing not an issue with how Netbeans performs as a development environment.
The debugger and profiler are really slow.
I have never had an issue with the debugger being slow on my machine. I will give you that my Machine is top of the line so it may not be exemplary of the standard, but still no issue. In fact Netbeans has a feature that I have not seen in any other IDE, that is a must have for me now. And that is the fact that I can trace and debug from the execution of the Javascript in the browser, through the REST services, into the app logic and down into the DB. For me being able to step through the code from the JavaScript in the browser to the DB and back again is an amazing feature that I cannot live without now. It was the reason I switched to Netbeans on my friend recommending it to me based on that feature. Further the DTrace hooks are amazing, being able to see what is going on at every level provides another level of insight that I have not seen in other IDE's.
It crashes all the time.
We have never had this problem. We use Netbeans on OSX this may be a platform thing. I work with 10 to 15 freelancer at a time. We all use Netbeans and crashing has never been an issue.
I have, and I did like it a lot, it was my IDE of choice before NB hit 6.5. For me now, I like NB better, two features in NB are must have ones for me now. (1) being able to take a class and generate the REST service and DB schema from it or taking a DB schema and generation the class and REST service. (2) being able to debug and trace a variable from the JavaScript executing in the browser through the REST service, into the business logic down into the DB / identity server / MQ server / etc. and back. I cannot live without either of those now.
Netbeans is just a desperate attempt to not lose control, still slow, still unbearable L&F on both Linux and OS X. And have you noticed Oracle has a competing product? Versus Eclipse that's backed by a non-profit with lots of third party contribs?
You only imply Eclipse is better because it's more modular and more popular.
For web or mobile development in Java, I prefer NetBeans and regard it as a well rounded up overall solution. I hear from Ruby programmers I respect it's really good for Rails work. For Python/GAE development, I prefer Eclipse because of Pydev. For Django and Clojure, I'll stay with Emacs.
For Java web development, I feel Eclipse is overly complex. Kind of flying a VTOL fighter to the supermarket.
> I respectfully submit that the man who thought AWT was an acceptable GUI toolkit doesn't have a leg to stand on here.
Where did Gosling say that? I remember reading that AWT was a botched job because they had very little time to ship out a UI toolkit. They replaced it with Swing later.
And if you think Swing also sucks, then try developing swing apps in groovy. Java language sucks even in SWT UIs.
So you ship a crappy GUI toolkit and you expect OS makers to do what exactly? Suck it up and deal with crap? Do your work for you and implement a higher quality cross-platform GUI toolkit? Or build OS specific tooling to solve the problem where they can? It's no wonder that both Microsoft and Apple ended up making modifications to Java for their own platforms, the platform as it existed was not suitable.
From "far more than they needed to be" I read that he thinks they changed "far more than they needed" to change in order for the native look & feel. So, he doesn't criticize their work, he criticizes the way they did the work.
The problem is not what Sun said to Apple or what any of them said to Oracle or the other way around. That's not my business. The problem is what Apple said to Java developers at a time when Apple was weak and how needlessly ruthless and brutal Apple turned against Java developers once they were strong.
I'm not naive enough to see this as a moral issue. It's a quite rational and understandable business decision on Apple's part. I just doubt that treating your partners or even ex-partners like that is beneficial in the long run.
You expect to find Java apps on Mac OS X which don't leverage the cross-platform angle? Crashplan is the best Java app I use on the Mac, and the Mac is a big part of their business. Apple itself uses them, from what I understand.
Part of what makes CrashPlan so killer is that it's not cloud-centric. It also offers backups to local storage, backups over the internet to authorized peers, and in the pro version, centralized backups to one's own servers and storage, which is obviously what Apple uses.
Check it out. It's the only offsite backup utility I know of which not only covers all the bandwidth conservation bases (compression, data de-duplication, block-level updates), but also allows you to do an initial backup to local storage, ship or transport the disk, and then continue to back up to it over the internet.
And before some intrepid nerd starts waxing rhapsodic about rsync and tin cans joined with string, CrashPlan also offers a respectable UI, sensible default backup selection, end-to-end encryption, firewall traversal, email notifications, total OS agnosticism, and a free version with all of the above.
Hell of a product. I have no relationship to the company except that of a satisfied customer.
We sell our server hardware as well, so clients can have their own backup cloud. Most of our very largest clients (who shall remain nameless) use this approach.
Poker Copilot (http://pokercopilot.com/ - a hand history database/HUD for online poker) is one example, and actually a good example of a business approach that many people here would doubtless love to follow (one guy, making a reasonable salary off of a medium-high-priced niche product, with no delusions of future massive growth).
Steve McLeod knew that he'd never be able to compete with Pokertracker on Windows (it doesn't run on OS X), so he decided to focus 100% on the OS X side of it and add features as he was able, and I think that was an excellent decision. The product is quite good there and doesn't feel like an afterthought like many OS X products. It's a small market, but he's pretty much the only player in town, so...
I trust you, still on the page is: "Poker Copilot is a native Mac application." I can of course imagine it's only to prevent users to worry if the application would run "as it should" or not. Thanks.
Thanks! Looks really interesting! In which products http://www.mimsoftware.com/products do you use the viewer? Can you give the percentages of Windows vs. Mac OS users?
I think he is saying that Oracle caused a lot of headaches for Apple in the past so Apple is returning the favor by trying to force them to support Java on their platform.Who knows how this will play out, but it will be interesting since many Java developers use Macs.
Yeah. Another way to look at this is that traditionally Java ports fell into two categories:
a.) The platform was important enough that Sun would lose credibility if there wasn't a good JVM available (Windows, Linux), so Sun (now Oracle) did the port.
b.) The platform was minor enough that the platform would lose credibility if there wasn't a good JVM available (MacOS, AIX, HP-UX), so the platform vendor did the port.
I see this as Apple indicating that with recent growth in market share and cachet, they've now moved from category b.) to category a.).
The a) category is not so clear-cut. Originally, it was up to OS vendors to support Java port, period. So Sun did it for Solaris, MS did it for Windows and nobody did it for Linux. Then MS tried to hijack Java and Blackdown did the Linux port. The current status is result of what happened in the past, not some master plan to support only tier A platforms.
I'm pretty sure Sun handled the Windows Java port, not Microsoft. Java was available on Windows pretty early on, and I can't see Microsoft rushing to make that happen.
Microsoft's wasn't first. I assure you. The Sun JDK VM was first. After Microsoft licensed it, and had Sun's code, it wouldn't have taken terribly long to make their changes and put out J++.
Wikipedia isn't good on this, because they don't have the relevant release dates.
A Usenet post from December of 1995 says:
" I been using the JDK 1.0 Beta 1.0 with Netscape 2.03 on Windows 95
for about 3 weeks now.
I just upgrade to the JDK 1.0 Beta 2 and guess what
I can not run any local applets. "
They weren't first to implement it, but they were the ones who made it a part of their browser and their OS very, very fast ("support Java for the platform" was the start of this thread). Sun's Java 1.0 was shipped on January 23, 1996, and Microsoft was sued in October 1997. There was indeed "a rush" by Microsoft. Note that I referred to your "I can't see Microsoft rushing to make that happen" so I apologize if missed that you wanted to discuss only "the initial implementation." Note that you replied to the parent which wrote "it was up to OS vendors to support Java port, period. So Sun did it for Solaris, MS did it for Windows and nobody did it for Linux." Note "support" not "initial implementation." MS really did and wanted to do it for Windows and rushed to it. Of course, it was not in the form that Sun liked.
Microsoft wouldn't have bothered if Sun hadn't done the Windows jdk and jvm in the first place. If there were no Java on Windows, it wouldn't be perceived as a threat that needed to be co-opted. Nor would there have been as much hype about Java if it hadn't been on Windows.
Before Java 1.0 shipped in early 1996 (for Windows and Solaris), there were a number of publicly available betas on Windows, which is how the hype was generated.
Also, my recollection is that it was never the case that Microsoft's was the only JVM on Windows, or that Sun stopped work on their Windows JVM. The two coexisted. There was no point at which Microsoft was the only source of a JVM on Windows.
"In the beginning, Microsoft provided Java for Windows - but Sun took over when Microsoft violated their contract and made Java code written on Windows unable to run on other systems."
AIX and HP-UX are very much not minor platforms in this space. 1) direct competitors to Solaris (and Sun back in the day) and 2) there's a hell of a lot of Oracle running on AIX and HP-UX (even more so in the early days of Java).
Until we know what Oracle is gonna do about this, all the talk is useless right now.
The fact that they split the feature-set for JDK7 due to time restrictions (aka plan b for jdk8) does not make me feel confident about them being able to throw out another VM for a different platform so quickly.
Please forgive my ignorance, but wasn't Google sued by Oracle over issues regarding Google's implementation of the Java VM? It just sounds natural that other companies would be less motivated to maintain their implementations...
No, Google is being sued because it doesn't implement the JVM. Instead Google created a completely independent VM for Android called Dalvik, and, crucially, a JVM to Dalvik bytecode compiler. Thus Google can leverage all the standard Java programming tools, but at the final stage of deployment they convert it to Dalvik which they claim is "not Java".
Very clever and very sneaky, which is why Oracle/Sun is annoyed.
J. Gosling's point isn't entirely clear to me, either. I came away with the impression that Oracle is a difficult company to deal with. Perhaps he's trying to draw a line between Oracle being difficult and Apple deciding they no longer want to do their own port. I supposes that's possible.
Still, it seems more likely that Apple decided that the cost of maintaining the Java port on OS X simply wasn't worth it. In the same manner that they decided that nobody wanted to use Flash on their smart-phones, they've decided that nobody wants to use Java on their laptops or workstations.
I think they've decided that, at this point, Java is within a few years of being a floppy disk drive in the iMac era.
Okay, that's a little harsh. But apart from Android, Java doesn't seem to have much buzz these days. And Android gets into the whole lawsuit mess.
Also, there seems to be a lot of disruption in the Java space due to the Oracle acquisition. IBM ditching Harmony for OpenJDK, the Oracle/Google lawsuit, etc.
This seems like an opportune time to step away. Since the whole Java ecosystem is stirred up and reconfiguring, it makes sense for Apple to pull back before a new configuration has solidified. While things are fluid, let the Java organizations figure out what they want to do with OS X.
My guess:
1. the port of Java to Mac OS X Lion is affecting the schedule for a summer 2011 release for Lion.
2. Mac App Store is not accepting desktop Java app.
The existing version of Java 6 will still run (and Apple has said it will have support for the normal cycle, whatever that means).
Potentially other versions could appear.
WebObjects use of java is primarily server side, and as such has less (possibly little) GUI usage.
It may even be possible to run WebObjects on other platforms. That becomes an interesting situation if the license stipulates Apple hardware, but Apple no longer provides the proper runtime environment to use it.
It will have an effect. Anyone using WebObjects will use an IDE for that. Currently all popular Java IDEs are written in Java. When there is no decent Java for frontend applications (Soylatte is X11.app only) then WebObjects Developers will have to use Linux oder Windows.
Apple has said it will have support for the normal cycle
It means deprecated for one rev and dropped the next. Just like they handled PowerPC supported in 10.4 deprecated in 10.5 gone in 10.6. So Java will be gone in 10.8.
Apple's implementation of the JVM may be gone in 10.8. That's not the same thing as saying there will be no JVM (and conversely no java of any kind). I suspect someone will step up to the plate, either openJDK or Sun/Oracle.
It does sound like from reading Gosling that Apple did this as a way to poke Oracle in the eye. The Mac has potentially become a large enough platform now that it seems Apple thinks they can leverage it against others. There is such a thing as overplaying a hand which I think Apple is dangerously close to doing (i.e. read their new mac app store rules).
What did strike me about the announcement though was how nonchalantly it was made. I have to think this was on purpose given how masterful Apple normally is with their marketing. So that leads to the question of why? Was Apple in talks with Oracle that broke down so they simply called Oracles bluff?
By the way, all of the knee jerk reactions have been very amusing. Reading comments and stories about it yesterday made me think Apple came down and removed Java from every Mac in existence :)
True, but there is a JVM for them to download and install. At some point, when there are new Java/JVM updates, there won't be an Apple to get them from, and there likely won't be anyone else to get them from either, unless Oracle steps up and starts providing it.
I've said it before - Sun was stupid for focusing so publicly on "JAVA" (ticker symbol, etc) yet leaving the implementations up to other vendors. But now there's not even a Sun to complain to, so... :/
> At some point, when there are new Java/JVM updates, there won't be an Apple to get them from, and there likely won't be anyone else to get them from either
I don't know what you mean under "new Java/JVM updates" but anything that's GPL of Sun's Java can be used by everybody:
Not a lot. To assuage my fears, I just built OpenJDK's BSD port and ran Eclipse 3.6.1 on it without X11 (This from Snow Leopard 10.6.4). It wasn't hard, and could easily be packaged for general consumption.
The maintainer of the OpenJDK binary packages for OS X, SoyLatte, recently tweeted that "A community supported Java implementation for Mac OS X (including native AWT/Swing) is a totally tractable problem." (http://twitter.com/landonfuller). Even if Oracle doesn't step up, it seems the OS X Java community will probably handle it. Moreover, since Java has been languishing at Cupertino for years now (the length of time till Java 5 shipped, Java 6 32 bit), it's likely the community will handle it in a better way, with more frequent updates, than Apple ever did.
Until it's something that's a DMG file that anyone can grab and is indicated to work on 10.6, it won't be a real solution for most people.
The soy latte stuff makes you type in a 'iam not a crook' license code to download, and only mentioned 10.4 and 10.5. It gives every indication of being a garage-hack-only thing for bleeding edge BSD grey beards, not something that is a drop-in replacement for current OSX users.
I want to use it - I tried soylatte last year - didn't work well enough for my purposes on 10.5.
I agree - it's not, at the moment, an ideal end user situation. Even though the build process was reasonably easy, a fair few GUI programs won't run (though mostly every command line app seems to work fine). Most importantly for my test, Eclipse was OK.
The main point of the test was to see how close the system was to being even usable. Considering Apple have maintained the OS X Java for a decade, I expected there to be no alternative that was even vaguely close to running "Hello World", let alone running something as complex as Eclipse. Instead, it worked pretty damn well, and (modulo licensing), I suspect even I could package up the results into a DMG that 95% of people could use to, i.e., build Android apps. More than that, consider the worst case scenario for OS X Java...
1) Apple don't ship anything with 10.7; 2) Oracle don't ship anything, nor do IBM; 3) Getting old versions of Apple Java running is impossible
Then, the real community experts have a nearly whole year of lead time (until Summer 2011, the earliest Lion ships) to convert what already limps along quite well into a decent Java SE SDK and runtime experience. This seems well within the grasp of them. Of course, if the community doesn't step up because it's not interested, then that rather makes the point that Java on OS X just isn't relevant any more.
So a default linux install shouldn't support perl? If OS's supported Java from the install just like they support exe's people wouldn't have to deal with downloading and configuring a runtime.. it would eliminate update managers and configuration issues.
The time is certainly ripe for a better language to step in and make cross-platform desktop application development easier. Seems like most anything you use (barring C++) necessitates shipping 20mb of dependencies.
It seems to me that one of the main benefits of desktop apps is that they are tightly coupled to the platform. Great cross-platform apps are very much the exception.
So my vote goes to web for cross-platform while heavily optimizing everything else (everything client-side, at least) for the one platform it natively runs on. I don't see great user experience coming through a different route.
If you do need native capabilities client-side, hybrid apps that embed a UI built using web technologies are a potential option sometimes, too.
"[...] Microsoft violated their contract and made Java code written on Windows unable to run on other systems."
More precisely, Microsoft violated their contract when they added classes and methods in the "java" top-level package (namespace) and failed to implemented some mandatory parts of the specification (mandatory as per the contract), such as RMI.
sad to see that all these years I've been bragging around, and happy to do so, with my macbook doing java dev. Finally I had a nice machine, cute os to work. Sad that some day a big corp will tell me that now it's windows or nothing. Sad to feel like apple is letting us down.
There are millions of java devs, probably millions on Macs. Do you really think there will be no more Java available on Macs in the future just because Apple said they won't be working on their own implementation anymore?