How do I set the Eclipse build path and class path from an Ant build file?

前端 未结 5 785
一个人的身影
一个人的身影 2021-02-09 05:25

There\'s a lot of discussion about Ant and Eclipse, but no previously answered seems to help me.

Here\'s the deal: I am trying to build a Java program that compiles succ

5条回答
  •  攒了一身酷
    2021-02-09 06:16

    I wrote an Ant Task that generates an Eclipse .userlibraries file. You can import the generated file to create a user library in Eclipse. And then use this user library as part of your build path.

    To use the task add this to your ant build file:

    
      
      
    
    

    Ant Task. It requires ant.jar to run and compile:

    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.tools.ant.BuildException;
    import org.apache.tools.ant.Project;
    import org.apache.tools.ant.Task;
    import org.apache.tools.ant.types.Path;
    import org.apache.tools.ant.types.Reference;
    
    /**
     * A custom tag to create a file the eclipse can import to setup a user libraries. 
     *
     * Created: Mar 29, 2014 9:44:09 AM
     *
     * @author Javier S. López
     * @version 1.0
     */
    public class CreateEclipseUserLibraries extends Task {
        public static final String UTF8_ENCODING = "UTF-8";
        public static final String DEFAULT_BOOT_CLASSPATH_LIBRARY_NAME = "SYSTEM_LIBRARY";
        public static final String DEFAULT_CLASSPATH_LIBRARY_NAME = "LIBRARY";
        public static final String DEFAULT_DESTINATION = "Eclipse.userlibraries";
        private static final String INDENT = "    ";
        private Path _classpath;
        private Path _bootClasspath;
        private String _bootClasspathLibraryName = DEFAULT_BOOT_CLASSPATH_LIBRARY_NAME;
        private String _classpathLibraryName = DEFAULT_CLASSPATH_LIBRARY_NAME;
        private String _destination = DEFAULT_DESTINATION;
    
        public void setClasspath(final Path classpath) {
            if (_classpath == null) {
                _classpath = classpath;
            } else {
                _classpath.append(classpath);
            }
        }
    
        public void setClasspathRef(final Reference reference) {
            if (_classpath == null) {
                final Project antProject = getProject();
                _classpath = new Path(antProject);
            }
            _classpath.setRefid(reference);
        }
    
        public void setBootClasspath(final Path bootClasspath) {
            if (_bootClasspath == null) {
                _bootClasspath = bootClasspath;
            } else {
                _bootClasspath.append(bootClasspath);
            }
        }
    
        public void setBootClasspathRef(final Reference reference) {
            if (_bootClasspath == null) {
                final Project antProject = getProject();
                _bootClasspath = new Path(antProject);
            }
            _bootClasspath.setRefid(reference);
        }
    
        public void setClasspathLibraryName(final String name) {
            if (!isEmpty(name)) {
                _classpathLibraryName = name;
            }
        }
    
        public void setBootClasspathLibraryName(final String name) {
            if (!isEmpty(name)) {
                _bootClasspathLibraryName = name;
            }
        }
    
        public void setDestination(final String argDestination) {
            if (!isEmpty(argDestination)) {
                _destination = argDestination;
            }
        }
    
        @Override
        public void execute() throws BuildException {
            if (_classpath == null) {
                throw new BuildException("classpath or classpathref attribute must be set");
            }
    
            if (_bootClasspath == null) {
                throw new BuildException("bootclasspath or bootclasspathref attribute must be set");
            }
            try {
                createUserLibrariesFile();
            } catch (final IOException e) {
                throw new BuildException(e.getMessage(), e);
            }
        }
    
        /**
         * @throws IOException
         *
         */
        private void createUserLibrariesFile() throws IOException {
            final StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("");
            stringBuilder.append("\n");
            stringBuilder.append("").append("\n");
            createBootClasspathLibrary(stringBuilder);
            createClasspathLibrary(stringBuilder);
            stringBuilder.append("");
    
            final Project antProject = getProject();
            final File baseDir = antProject.getBaseDir();
            final File file = new File(baseDir, _destination);
            if (file.exists()) {
                file.delete();
            }
            final boolean append = false;
            BufferedOutputStream bos = null;
            try {
                final FileOutputStream fos = new FileOutputStream(file, append);
                bos = new BufferedOutputStream(fos);
                bos.write(stringBuilder.toString().getBytes(UTF8_ENCODING));
                bos.flush();
            } finally {
                if (bos != null) {
                    bos.close();
                }
            }
        }
    
        /**
         * @param stringBuilder
         *
         */
        private void createBootClasspathLibrary(final StringBuilder stringBuilder) {
            createLibrary(stringBuilder, _bootClasspathLibraryName, true, _bootClasspath);
        }
    
        /**
         * @param stringBuilder
         */
        private void createClasspathLibrary(final StringBuilder stringBuilder) {
            createLibrary(stringBuilder, _classpathLibraryName, false, _classpath);
        }
    
        /**
         * @param stringBuilder
         * @param bootClasspathLibraryName
         * @param b
         * @param bootClasspath
         */
        private void createLibrary(final StringBuilder stringBuilder, final String libraryName,
            final boolean isSystemLibrary, final Path path) {
            stringBuilder.append(INDENT).append("\n");
            final String[] paths = path.list();
            final Project antProject = getProject();
            final File baseDir = antProject.getBaseDir();
            final String baseDirName = baseDir.getName();
    
            for (final String strPath : paths) {
                final int index = strPath.indexOf(baseDirName);
                //Only include the relative path
                if (index != -1) {
                    stringBuilder.append(INDENT).append(INDENT);
                    stringBuilder.append("\n");
                }
            }
    
            stringBuilder.append(INDENT).append("\n");
        }
    
        public static final boolean isEmpty(final String str) {
            return (str == null) || (str.length() == 0);
        }
    }
    

提交回复
热议问题