views:

405

answers:

5

I use Eclipse to write Java code and use DropBox to sync my code with others' across our multiple computers. Most of the time, everything works as expected: if anyone makes a change on either end, the change is saved and when the other person refreshes the Eclipse workspace, the changes come through and can be viewed and run successfully.

Sometimes, one of several errors arises. Sometimes Eclipse says it cannot find a main class and sometimes it says it could not find the class itself. Sometimes it will not report an error but for some reason will not actually update the .class file and therefore run an old version even though the compiler displays the new source code and that saves. I've then noticed that if I manually copy the code into a new .java file elsewhere in the file system and then compile it, it works fine, but for some reason it refuses to regenerate the .class file and I have to delete it manually and replace it with the one generated in the other project--then it works. But for solving the other problems everything needs to be manually copied, deleted, and re-pasted....

[The actual errors include NoClassDefFoundError, UnsupportedClassVersionError, and some other error related to not having a main class.]

I realize that the description here is somewhat vague, but unfortunately I'm not entirely sure what's going on. I hope I'm just missing some basic fact that would help solve all these problems.

Thanks!

+4  A: 

I'm sure you will see issues using Dropbox for sharing your source.

Eclipse does not know what Dropbox is doing whilst it's uploading and downloading updates and their activities will certainly not be synchronised. At arbitrary points in time when Eclipse tries to do builds etc. it will find unexpected activity going on, maybe even partially downloaded source files which might explain the specific errors you are seeing.

You're trying to do something more complex than sharing photos or documents. The advice I would give is to use a source control system like git or subversion for source code sharing and control. You can then make use of plugins for Eclipse that are designed to integrate these systems in an easy to use way. There's a learning curve there, but the skills will serve you well.

You can use online versions of these solutions like github and unfuddle if you want to consume sharing, backup and version control of source as a service like you do with Dropbox. They're free, too.

Brabster
+2  A: 

Dropbox is not really an adapted system for sharing code. What you should do is set up a SVN, and commit only the source files. This way, you won't have these kind of errors.

Valentin Rocher
+4  A: 

Subversion, Git and all version control software solve all of these problems for you.

Travis Gockel
+1  A: 

Dropbox does have versioning (you can restore old versions of a file), and doesn't seem to be a horrible solution for the problem. I keep my Eclipse repository on Dropbox so it is available on any computer; but since I only use it myself, I haven't encountered your problems.

There is one case I can absolutely see you running into problems--it's if your class files are stored in the dropbox as well. This would just screw everything up. Make sure you specify a location on your local hard-drive for all build artifacts (classes, jars, ...) and that the only thing on your dropbox is the .java sources.

In fact, I suggest you don't keep your eclipse project in your dropbox, just create your eclipse project and point it to the java files in your dropbox.

If this doesn't work for you, go with what other people here said and set up a SVN repository somewhere, it's easier than you would think.

Oh, another possible problem--dates! You may want to make sure the date on your java files isn't jumping forwards and backwards (as might happen if one of your developers were in another time zone). In this case, Eclipse may prefer not to re-compile your file.

Also, instead of the copy/etc procedure you are currently going through, try forcing a project clean.

Response to request for more info:

When you start Eclipse, select/create a workspace that is NOT on your dropbox. The best place is probably off your home directory. If you have already specified a default workspace, there should be a switch workspace item in the file menu.

Create your project. select "Create project from existing source" and specify the source files in your dropbox. I think you want "create separate folders for source and class files" to keep your class files out of your dropbox. If you see anything saying "Copy files into your workspace, say "no".

This should give you a valid, working project. I hope you don't see those problems any more.

One more thing may help--and this may work on your existing project--without the above procedure...

Whenever you refresh your files (f5) to load in changes from the dropbox, select the Project/clean menu and select the project. This should delete all the class files and rebuild them.

If your classfiles are shared on the dropbox, this could still have strange consequences on other people with eclipse open, so I really do suggest rebuilding your workspace as I said above.

Bill K
"specify a location ... and that the only thing on your dropbox is the .java sources.""don't keep your eclipse project in your dropbox, just create your eclipse project and point it to the java files in your dropbox."Also, instead of the copy/etc procedure you are currently going through, try forcing a project clean.--Your solution would be ideal if it can work. Could you please let me know the detailed instructions for doing each of the quoted things, though? I *think* I know how, but I don't want to miss any step and then falsely report that it didn't work. Thanks!
Philip
OK, thanks. The problem seems to be twofold: one, in creating from existing source, I cannot choose the option for sources/class files. Two, even when I do have that option, when I select "create separate folders for sources and class files" there does not appear to be a way to put the "bin" folder anywhere but in the project directory, which would seem to be the key part of the solution. Do I have that correct, or did I miss something? Thanks!
Philip
--Hmm to put it simply, just make sure your .class files are NOT on the dropbox--only .java files. If you can manage that then it's my belief that it won't fail. Also note, if two people are editing the same source at the same time, one is very likely to lose their changes--unless they are very lucky and can merge with the history eclipse keeps.
Bill K
OK I'll ask to see if anyone knows a way to get Eclipse to keep the files elsewhere; thanks.
Philip
Simply creating the project itself elsewhere should do it, but I haven't actually tested that. I did walk through the creation procedure when I set up the project and did check for the "create separate folders for source and class files" option--that is there for sure in the latest version of eclipse create project wizard.
Bill K
A: 

How to avoid no main class

Provide one. That issue has nothing to do with DropBox

EJP
Another silent fan. Some error above?
EJP