| /* |
| * 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 |
| * |
| * https://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.ivy.ant; |
| |
| import java.io.File; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Date; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.apache.ivy.Ivy; |
| import org.apache.ivy.core.IvyPatternHelper; |
| import org.apache.ivy.core.module.descriptor.Artifact; |
| import org.apache.ivy.core.module.id.ArtifactRevisionId; |
| import org.apache.ivy.core.module.id.ModuleRevisionId; |
| import org.apache.ivy.core.publish.PublishOptions; |
| import org.apache.ivy.core.settings.IvySettings; |
| import org.apache.ivy.util.DateUtil; |
| import org.apache.tools.ant.BuildException; |
| import org.apache.tools.ant.DynamicAttribute; |
| |
| import static org.apache.ivy.util.StringUtils.splitToArray; |
| |
| /** |
| * This task allow to publish a module revision to an Ivy repository. |
| */ |
| public class IvyPublish extends IvyTask { |
| private String organisation; |
| |
| private String module; |
| |
| private String revision; |
| |
| private String pubRevision; |
| |
| private String srcivypattern; |
| |
| private String status; |
| |
| private String conf = null; |
| |
| private String pubdate; |
| |
| private String deliverTarget; |
| |
| private String publishResolverName = null; |
| |
| private List<String> artifactspattern = new ArrayList<>(); |
| |
| private File deliveryList; |
| |
| private boolean publishivy = true; |
| |
| private boolean warnonmissing = true; |
| |
| private boolean haltonmissing = true; |
| |
| private boolean overwrite = false; |
| |
| private boolean update = false; |
| |
| private boolean merge = true; |
| |
| private boolean replacedynamicrev = true; |
| |
| private boolean forcedeliver; |
| |
| private Collection<Artifact> artifacts = new ArrayList<>(); |
| |
| private String pubBranch; |
| |
| public void setCache(File cache) { |
| cacheAttributeNotSupported(); |
| } |
| |
| public String getSrcivypattern() { |
| return srcivypattern; |
| } |
| |
| public void setSrcivypattern(String destivypattern) { |
| srcivypattern = destivypattern; |
| } |
| |
| /** |
| * @return String |
| * @deprecated use {@link #getSrcivypattern()} instead. |
| */ |
| @Deprecated |
| public String getDeliverivypattern() { |
| return srcivypattern; |
| } |
| |
| /** |
| * @param destivypattern String |
| * @deprecated use {@link #setSrcivypattern(String)} instead. |
| */ |
| @Deprecated |
| public void setDeliverivypattern(String destivypattern) { |
| srcivypattern = destivypattern; |
| } |
| |
| public String getModule() { |
| return module; |
| } |
| |
| public void setModule(String module) { |
| this.module = module; |
| } |
| |
| public String getOrganisation() { |
| return organisation; |
| } |
| |
| public void setOrganisation(String organisation) { |
| this.organisation = organisation; |
| } |
| |
| public String getPubdate() { |
| return pubdate; |
| } |
| |
| public void setPubdate(String pubdate) { |
| this.pubdate = pubdate; |
| } |
| |
| public String getPubrevision() { |
| return pubRevision; |
| } |
| |
| public void setPubrevision(String pubRevision) { |
| this.pubRevision = pubRevision; |
| } |
| |
| public String getPubbranch() { |
| return pubBranch; |
| } |
| |
| public void setPubbranch(String pubBranch) { |
| this.pubBranch = pubBranch; |
| } |
| |
| public String getRevision() { |
| return revision; |
| } |
| |
| public void setRevision(String revision) { |
| this.revision = revision; |
| } |
| |
| public String getStatus() { |
| return status; |
| } |
| |
| public void setStatus(String status) { |
| this.status = status; |
| } |
| |
| public void setConf(String conf) { |
| this.conf = conf; |
| } |
| |
| public void setDelivertarget(String deliverTarget) { |
| this.deliverTarget = deliverTarget; |
| } |
| |
| public void setDeliveryList(File deliveryList) { |
| this.deliveryList = deliveryList; |
| } |
| |
| public String getResolver() { |
| return publishResolverName; |
| } |
| |
| public void setResolver(String publishResolverName) { |
| this.publishResolverName = publishResolverName; |
| } |
| |
| public String getArtifactspattern() { |
| return artifactspattern.isEmpty() ? null : artifactspattern.get(0); |
| } |
| |
| public void setArtifactspattern(String artifactsPattern) { |
| artifactspattern.clear(); |
| artifactspattern.add(artifactsPattern); |
| } |
| |
| public void addArtifactspattern(String artifactsPattern) { |
| artifactspattern.add(artifactsPattern); |
| } |
| |
| public void addConfiguredArtifacts(ArtifactsPattern p) { |
| artifactspattern.add(p.getPattern()); |
| } |
| |
| public boolean isReplacedynamicrev() { |
| return replacedynamicrev; |
| } |
| |
| public void setReplacedynamicrev(boolean replacedynamicrev) { |
| this.replacedynamicrev = replacedynamicrev; |
| } |
| |
| public boolean isMerge() { |
| return merge; |
| } |
| |
| public void setMerge(boolean merge) { |
| this.merge = merge; |
| } |
| |
| @Override |
| public void doExecute() throws BuildException { |
| Ivy ivy = getIvyInstance(); |
| IvySettings settings = ivy.getSettings(); |
| |
| organisation = getProperty(organisation, settings, "ivy.organisation"); |
| module = getProperty(module, settings, "ivy.module"); |
| revision = getProperty(revision, settings, "ivy.revision"); |
| pubBranch = getProperty(pubBranch, settings, "ivy.deliver.branch"); |
| pubRevision = getProperty(pubRevision, settings, "ivy.deliver.revision"); |
| if (artifactspattern.isEmpty()) { |
| String p = getProperty(null, settings, "ivy.publish.src.artifacts.pattern"); |
| if (p != null) { |
| artifactspattern.add(p); |
| } |
| } |
| if (srcivypattern == null) { |
| srcivypattern = getArtifactspattern(); |
| } |
| status = getProperty(status, settings, "ivy.status"); |
| if (organisation == null) { |
| throw new BuildException("no organisation provided for ivy publish task: " |
| + "It can either be set explicitly via the attribute 'organisation' " |
| + "or via 'ivy.organisation' property or a prior call to <resolve/>"); |
| } |
| if (module == null) { |
| throw new BuildException("no module name provided for ivy publish task: " |
| + "It can either be set explicitly via the attribute 'module' " |
| + "or via 'ivy.module' property or a prior call to <resolve/>"); |
| } |
| if (revision == null) { |
| throw new BuildException("no module revision provided for ivy publish task: " |
| + "It can either be set explicitly via the attribute 'revision' " |
| + "or via 'ivy.revision' property or a prior call to <resolve/>"); |
| } |
| if (artifactspattern.isEmpty()) { |
| throw new BuildException( |
| "no artifacts pattern: either provide it through parameter or " |
| + "through ivy.publish.src.artifacts.pattern property"); |
| } |
| if (publishResolverName == null) { |
| throw new BuildException( |
| "no publish deliver name: please provide it through parameter 'resolver'"); |
| } |
| if ("working".equals(revision)) { |
| revision = Ivy.getWorkingRevision(); |
| } |
| Date pubdate = getPubDate(this.pubdate, new Date()); |
| if (pubRevision == null) { |
| if (revision.startsWith("working@")) { |
| pubRevision = DateUtil.format(pubdate); |
| } else { |
| pubRevision = revision; |
| } |
| } |
| if (status == null) { |
| throw new BuildException("no status provided: either provide it as parameter " |
| + "or through the ivy.status.default property"); |
| } |
| ModuleRevisionId mrid = ModuleRevisionId.newInstance(organisation, module, revision); |
| try { |
| File ivyFile = getProject().resolveFile( |
| IvyPatternHelper.substitute(srcivypattern, organisation, module, pubRevision, |
| "ivy", "ivy", "xml")); |
| if (publishivy && (!ivyFile.exists() || forcedeliver)) { |
| IvyDeliver deliver = new IvyDeliver(); |
| deliver.setSettingsRef(getSettingsRef()); |
| deliver.setTaskName(getTaskName()); |
| deliver.setProject(getProject()); |
| deliver.setDeliverpattern(getSrcivypattern()); |
| deliver.setDelivertarget(deliverTarget); |
| deliver.setDeliveryList(deliveryList); |
| deliver.setModule(getModule()); |
| deliver.setOrganisation(getOrganisation()); |
| deliver.setPubdate(DateUtil.format(pubdate)); |
| deliver.setPubrevision(getPubrevision()); |
| deliver.setPubbranch(getPubbranch()); |
| deliver.setRevision(getRevision()); |
| deliver.setStatus(getStatus()); |
| deliver.setValidate(doValidate(settings)); |
| deliver.setReplacedynamicrev(isReplacedynamicrev()); |
| deliver.setMerge(merge); |
| deliver.setConf(conf); |
| |
| deliver.execute(); |
| } |
| |
| ivy.publish( |
| mrid, |
| artifactspattern, |
| publishResolverName, |
| new PublishOptions().setPubrevision(getPubrevision()).setPubbranch(getPubbranch()) |
| .setSrcIvyPattern(publishivy ? srcivypattern : null).setStatus(getStatus()) |
| .setPubdate(pubdate) |
| .setExtraArtifacts(artifacts.toArray(new Artifact[artifacts.size()])) |
| .setValidate(doValidate(settings)).setOverwrite(overwrite) |
| .setUpdate(update).setMerge(merge).setWarnOnMissing(warnonmissing) |
| .setHaltOnMissing(haltonmissing).setConfs(splitToArray(conf))); |
| } catch (Exception e) { |
| if (e instanceof BuildException) { |
| throw (BuildException) e; |
| } |
| throw new BuildException("impossible to publish artifacts for " + mrid + ": " + e, e); |
| } |
| } |
| |
| public PublishArtifact createArtifact() { |
| PublishArtifact art = new PublishArtifact(); |
| artifacts.add(art); |
| return art; |
| } |
| |
| public boolean isPublishivy() { |
| return publishivy; |
| } |
| |
| public void setPublishivy(boolean publishivy) { |
| this.publishivy = publishivy; |
| } |
| |
| public boolean isWarnonmissing() { |
| return warnonmissing; |
| } |
| |
| public void setWarnonmissing(boolean warnonmissing) { |
| this.warnonmissing = warnonmissing; |
| } |
| |
| public boolean isHaltonmissing() { |
| return haltonmissing; |
| } |
| |
| public void setHaltonmissing(boolean haltonmissing) { |
| this.haltonmissing = haltonmissing; |
| } |
| |
| public boolean isOverwrite() { |
| return overwrite; |
| } |
| |
| public void setOverwrite(boolean overwrite) { |
| this.overwrite = overwrite; |
| } |
| |
| public void setForcedeliver(boolean b) { |
| forcedeliver = b; |
| } |
| |
| public boolean isForcedeliver() { |
| return forcedeliver; |
| } |
| |
| public boolean isUpdate() { |
| return update; |
| } |
| |
| public void setUpdate(boolean update) { |
| this.update = update; |
| } |
| |
| public class PublishArtifact implements Artifact, DynamicAttribute { |
| private String ext; |
| |
| private String name; |
| |
| private String type; |
| |
| private Map<String, String> extra = new HashMap<>(); |
| |
| public String[] getConfigurations() { |
| return null; |
| } |
| |
| public String getExt() { |
| return ext == null ? type : ext; |
| } |
| |
| public ArtifactRevisionId getId() { |
| return null; |
| } |
| |
| public ModuleRevisionId getModuleRevisionId() { |
| return null; |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| public Date getPublicationDate() { |
| return null; |
| } |
| |
| public String getType() { |
| return type; |
| } |
| |
| public URL getUrl() { |
| return null; |
| } |
| |
| public void setExt(String ext) { |
| this.ext = ext; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| public void setType(String type) { |
| this.type = type; |
| } |
| |
| public String getAttribute(String attName) { |
| return extra.get(attName); |
| } |
| |
| public Map<String, String> getAttributes() { |
| return extra; |
| } |
| |
| public String getExtraAttribute(String attName) { |
| return extra.get(attName); |
| } |
| |
| public Map<String, String> getExtraAttributes() { |
| return extra; |
| } |
| |
| public Map<String, String> getQualifiedExtraAttributes() { |
| return extra; |
| } |
| |
| public boolean isMetadata() { |
| return false; |
| } |
| |
| public void setDynamicAttribute(String name, String value) { |
| extra.put(name, value); |
| } |
| } |
| |
| public static class ArtifactsPattern { |
| private String pattern; |
| |
| public String getPattern() { |
| return pattern; |
| } |
| |
| public void setPattern(String pattern) { |
| this.pattern = pattern; |
| } |
| } |
| } |