diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java new file mode 100644 index 00000000..f5767e67 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java @@ -0,0 +1,183 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.optional.jlink; + +import java.io.File; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.MatchingTask; +import org.apache.tools.ant.types.Path; + +/** + * This class defines objects that can link together various jar and + * zip files. + * + * <p>It is basically a wrapper for the jlink code written originally + * by <a href="mailto:beard@netscape.com">Patrick Beard</a>. The + * classes org.apache.tools.ant.taskdefs.optional.jlink.Jlink and + * org.apache.tools.ant.taskdefs.optional.jlink.ClassNameReader + * support this class.</p> + * + * <p>For example: + * <code> + * <pre> + * <jlink compress="false" outfile="out.jar"/> + * <mergefiles> + * <pathelement path="${build.dir}/mergefoo.jar"/> + * <pathelement path="${build.dir}/mergebar.jar"/> + * </mergefiles> + * <addfiles> + * <pathelement path="${build.dir}/mac.jar"/> + * <pathelement path="${build.dir}/pc.zip"/> + * </addfiles> + * </jlink> + * </pre> + * </code> + * + * @ant.task ignore="true" + */ +public class JlinkTask extends MatchingTask { + + /** + * The output file for this run of jlink. Usually a jar or zip file. + * @param outfile the output file + */ + public void setOutfile(File outfile) { + this.outfile = outfile; + } + + /** + * Establishes the object that contains the files to + * be merged into the output. + * @return a path to be configured + */ + public Path createMergefiles() { + if (this.mergefiles == null) { + this.mergefiles = new Path(getProject()); + } + return this.mergefiles.createPath(); + } + + /** + * Sets the files to be merged into the output. + * @param mergefiles a path + */ + public void setMergefiles(Path mergefiles) { + if (this.mergefiles == null) { + this.mergefiles = mergefiles; + } else { + this.mergefiles.append(mergefiles); + } + } + + /** + * Establishes the object that contains the files to + * be added to the output. + * @return a path to be configured + */ + public Path createAddfiles() { + if (this.addfiles == null) { + this.addfiles = new Path(getProject()); + } + return this.addfiles.createPath(); + } + + /** + * Sets the files to be added into the output. + * @param addfiles a path + */ + public void setAddfiles(Path addfiles) { + if (this.addfiles == null) { + this.addfiles = addfiles; + } else { + this.addfiles.append(addfiles); + } + } + + /** + * Defines whether or not the output should be compacted. + * @param compress a <code>boolean</code> value + */ + public void setCompress(boolean compress) { + this.compress = compress; + } + + /** + * Does the adding and merging. + * @throws BuildException on error + */ + public void execute() throws BuildException { + //Be sure everything has been set. + if (outfile == null) { + throw new BuildException("outfile attribute is required! " + + "Please set."); + } + if (!haveAddFiles() && !haveMergeFiles()) { + throw new BuildException("addfiles or mergefiles required! " + + "Please set."); + } + log("linking: " + outfile.getPath()); + log("compression: " + compress, Project.MSG_VERBOSE); + jlink linker = new jlink(); + linker.setOutfile(outfile.getPath()); + linker.setCompression(compress); + if (haveMergeFiles()) { + log("merge files: " + mergefiles.toString(), Project.MSG_VERBOSE); + linker.addMergeFiles(mergefiles.list()); + } + if (haveAddFiles()) { + log("add files: " + addfiles.toString(), Project.MSG_VERBOSE); + linker.addAddFiles(addfiles.list()); + } + try { + linker.link(); + } catch (Exception ex) { + throw new BuildException(ex, getLocation()); + } + } + + private boolean haveAddFiles() { + return haveEntries(addfiles); + } + + private boolean haveMergeFiles() { + return haveEntries(mergefiles); + } + + private boolean haveEntries(Path p) { + if (p == null) { + return false; + } + if (p.size() > 0) { + return true; + } + return false; + } + + private File outfile = null; + + private Path mergefiles = null; + + private Path addfiles = null; + + private boolean compress = false; + +} + + |