/*
* Copyright (C) 2010 JFrog Ltd.
*
* Licensed 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.jfrog.hudson;
import hudson.Extension;
import hudson.maven.MavenBuild;
import hudson.maven.MavenBuildProxy;
import hudson.maven.MavenBuildProxy.BuildCallable;
import hudson.maven.MavenModule;
import hudson.maven.MavenReporter;
import hudson.maven.MavenReporterDescriptor;
import hudson.maven.MojoInfo;
import hudson.model.BuildListener;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.MavenProject;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
/**
* Records dependencies used during the build.
*
* @author Yossi Shaul
* @deprecated All maven specific classes moved to org.jfrog.hudson.maven.
*/
@Deprecated
public class MavenDependenciesRecorder extends MavenReporter {
/**
* All dependencies this module used, including transitive ones.
*/
private transient Set<MavenDependency> dependencies;
@Override
public boolean preBuild(MavenBuildProxy build, MavenProject pom, BuildListener listener) {
listener.getLogger().println("[HUDSON] Collecting dependencies info");
dependencies = new HashSet<MavenDependency>();
return true;
}
/**
* Mojos perform different dependency resolution, so we add dependencies for each mojo.
*/
@Override
public boolean postExecute(MavenBuildProxy build, MavenProject pom, MojoInfo mojo, BuildListener listener,
Throwable error) {
//listener.getLogger().println("[MavenDependenciesRecorder] mojo: " + mojo.getClass() + ":" + mojo.getGoal());
//listener.getLogger().println("[MavenDependenciesRecorder] dependencies: " + pom.getArtifacts());
recordMavenDependencies(pom.getArtifacts());
return true;
}
/**
* Sends the collected dependencies over to the master and record them.
*/
@Override
public boolean postBuild(MavenBuildProxy build, MavenProject pom, BuildListener listener)
throws InterruptedException, IOException {
build.executeAsync(new BuildCallable<Void, IOException>() {
// record is transient, so needs to make a copy first
private final Set<MavenDependency> d = dependencies;
public Void call(MavenBuild build) throws IOException, InterruptedException {
// add the action
//TODO: [by yl] These actions are persisted into the build.xml of each build run - we need another
//context to store these actions
build.getActions().add(new MavenDependenciesRecord(build, d));
return null;
}
});
return true;
}
private void recordMavenDependencies(Set<Artifact> artifacts) {
if (artifacts != null) {
for (Artifact dependency : artifacts) {
MavenDependency mavenDependency = new MavenDependency();
mavenDependency.id = dependency.getId();
mavenDependency.groupId = dependency.getGroupId();
mavenDependency.artifactId = dependency.getArtifactId();
mavenDependency.version = dependency.getVersion();
mavenDependency.classifier = dependency.getClassifier();
mavenDependency.scope = dependency.getScope();
mavenDependency.fileName = dependency.getFile().getName();
mavenDependency.type = dependency.getType();
dependencies.add(mavenDependency);
}
}
}
@Extension
public static final class DescriptorImpl extends MavenReporterDescriptor {
@Override
public String getDisplayName() {
return "Record Maven Dependencies";
}
@Override
public MavenReporter newAutoInstance(MavenModule module) {
return new MavenDependenciesRecorder();
}
}
private static final long serialVersionUID = 1L;
}