English 中文(简体)
How to avoid no main class and no class def found error using DropBox and Eclipse for Java
原标题:

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!

最佳回答

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.

问题回答

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

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.

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.

How to avoid no main class

Provide one. That issue has nothing to do with DropBox





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签