Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/Maven2Plugin.java =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/Maven2Plugin.java (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/Maven2Plugin.java (working copy) @@ -455,16 +455,18 @@ } private void extractSourceDirs( Set directories, List sourceRoots, File basedir, File projectBaseDir ) { + String relativedirpath = toRelativeAndFixSeparator( projectBaseDir, basedir.getAbsolutePath() ); for( Iterator it = sourceRoots.iterator(); it.hasNext(); ) { String sourceRoot = ( String ) it.next(); if( new File( sourceRoot ).isDirectory() ) { - directories.add( toRelativeAndFixSeparator( projectBaseDir, sourceRoot ) ); + directories.add( relativedirpath + ":" + toRelativeAndFixSeparator( projectBaseDir, sourceRoot ) ); } } } private void extractResourceDirs( Set directories, List resources, File basedir, File projectBaseDir ) { + String relativedirpath = toRelativeAndFixSeparator( projectBaseDir, basedir.getAbsolutePath() ); for( Iterator it = resources.iterator(); it.hasNext(); ) { Resource resource = ( Resource ) it.next(); @@ -474,7 +476,7 @@ continue; } - directories.add( toRelativeAndFixSeparator( projectBaseDir, resource.getDirectory() ) ); + directories.add( relativedirpath + ":" + toRelativeAndFixSeparator( projectBaseDir, resource.getDirectory() ) ); } } Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/actions/UpdateSourcesAction.java =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/actions/UpdateSourcesAction.java (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/actions/UpdateSourcesAction.java (working copy) @@ -10,6 +10,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -19,11 +20,13 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.maven.ide.eclipse.Maven2Plugin; +import org.maven.ide.eclipse.preferences.Maven2PreferenceConstants; public class UpdateSourcesAction implements IObjectActionDelegate { @@ -93,14 +96,33 @@ } private void updateProject( Set sources, IProject project2, IProgressMonitor monitor ) throws JavaModelException { + IPreferenceStore preferenceStore = Maven2Plugin.getDefault().getPreferenceStore(); + boolean separate = Boolean.valueOf(preferenceStore.getString(Maven2PreferenceConstants.P_SEPARATE_OUTPUT_FOLDERS)).booleanValue(); + + IJavaProject javaProject = JavaCore.create(project); + String defaultOutput = javaProject.getOutputLocation().toPortableString(); + int slash = defaultOutput.indexOf('/', 1); + if (slash>=0) { + defaultOutput = defaultOutput.substring(slash+1); + } else { + defaultOutput = ""; + } + ArrayList sourceEntries = new ArrayList(); for( Iterator it = sources.iterator(); it.hasNext(); ) { - String name = ( String ) it.next(); + String fullname = ( String ) it.next(); + int colon = fullname.indexOf(':'); + String relativedir = fullname.substring(0, colon); + String name = fullname.substring(colon+1); IResource resource = project.findMember(name); - sourceEntries.add(JavaCore.newSourceEntry( resource.getFullPath() /*, new IPath[] { new Path( "**"+"/.svn/"+"**")} */)); + if (!separate) { + sourceEntries.add(JavaCore.newSourceEntry( resource.getFullPath() /*, new IPath[] { new Path( "**"+"/.svn/"+"**")} */)); + } else { + IResource output = project.getFolder(relativedir + "/" + defaultOutput); + sourceEntries.add(JavaCore.newSourceEntry( resource.getFullPath(), new IPath[0], output.getFullPath())); + } } - IJavaProject javaProject = JavaCore.create(project); IClasspathEntry[] currentClasspath = javaProject.getRawClasspath(); for( int i = 0; i < currentClasspath.length; i++ ) { if( currentClasspath[i].getEntryKind()!=IClasspathEntry.CPE_SOURCE) { Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferenceConstants.java =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferenceConstants.java (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferenceConstants.java (working copy) @@ -32,5 +32,7 @@ /** boolean */ public static final String P_DEBUG_OUTPUT = PREFIX+"debugOutput"; + /** boolean */ + public static final String P_SEPARATE_OUTPUT_FOLDERS = PREFIX+"separateOutputFolders"; } Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferencePage.java =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferencePage.java (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferencePage.java (working copy) @@ -86,6 +86,10 @@ Messages.getString("preferences.debugOutput"), //$NON-NLS-1$ getFieldEditorParent())); + addField( new BooleanFieldEditor( Maven2PreferenceConstants.P_SEPARATE_OUTPUT_FOLDERS, + Messages.getString("preferences.separateOutputFolders"), //$NON-NLS-1$ + getFieldEditorParent())); + } /* Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferenceInitializer.java =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferenceInitializer.java (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/preferences/Maven2PreferenceInitializer.java (working copy) @@ -35,6 +35,7 @@ store.setDefault( Maven2PreferenceConstants.P_PLUGIN_UPDATE_OVERRIDE, false); store.setDefault( Maven2PreferenceConstants.P_USE_PLUGIN_REGISTRY, true); + store.setDefault( Maven2PreferenceConstants.P_SEPARATE_OUTPUT_FOLDERS, false); // MavenEmbedder embedder = plugin.getMavenEmbedder(); // File localRepository = embedder.getLocalRepositoryDirectory(); // if(localRepository!=null) { Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/messages.properties =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/messages.properties (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/messages.properties (working copy) @@ -44,3 +44,4 @@ preferences.policyInterval=interval preferences.policyNever=never preferences.debugOutput=&Debug Output +preferences.separateOutputFolders=&Separate Output Folders Index: C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/launch/Maven2LaunchDelegate.java =================================================================== --- C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/launch/Maven2LaunchDelegate.java (revision 5) +++ C:/eclipse/workspace/org.maven.ide.eclipse/src/org/maven/ide/eclipse/launch/Maven2LaunchDelegate.java (working copy) @@ -183,6 +183,9 @@ b = preferenceStore.getBoolean(Maven2PreferenceConstants.P_DEBUG_OUTPUT); sb.append(D).append(Maven2PreferenceConstants.P_DEBUG_OUTPUT).append("=").append(b); + + b = preferenceStore.getBoolean(Maven2PreferenceConstants.P_SEPARATE_OUTPUT_FOLDERS); + sb.append(D).append(Maven2PreferenceConstants.P_SEPARATE_OUTPUT_FOLDERS).append("=").append(b); return sb.toString(); }