Zkuste vyjít z tohoto:
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.IOUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
/**
* Goal which touches a timestamp file.
*
* @goal write
*
* @phase package
*/
public class MyMojo extends AbstractMojo {
/**
* @parameter expression="${localRepository}"
* @required
* @readonly
*/
private ArtifactRepository localRepository;
/**
* @component role="org.apache.maven.artifact.resolver.ArtifactResolver"
* @required
* @readonly
*/
private ArtifactResolver artifactResolver;
/**
* @parameter expression="${project.remoteArtifactRepositories}"
* @required
* @readonly
*/
private java.util.List remoteRepositories;
/**
* @component role="org.apache.maven.artifact.factory.ArtifactFactory"
* @required
* @readonly
*/
private ArtifactFactory artifactFactory;
/**
* @parameter expression="${project.version}"
* @readonly
*/
private String version;
/**
* @component
* @required
* @readonly
*/
private ArtifactMetadataSource artifactMetadataSource;
/**
* @component role="org.apache.maven.project.MavenProjectBuilder"
* @required
*/
private MavenProjectBuilder mavenProjectBuilder;
/**
* @parameter expression="${project.groupId}"
* @required
*/
public String groupId;
/**
* @parameter expression=""
*/
public String filePrefix;
/**
* @parameter expression=""
*/
public String linePrefix;
/**
* @parameter
* @required
*/
public String[] artifactIds;
/**
* @parameter
*/
public String[] excludeIds;
/**
* Location of the file.
*
* @parameter
* @required
*/
private File outputFile;
/**
* Location of the file.
*
* @parameter expression="true"
* @required
*/
private final Boolean writeFull = true;
public void execute() throws MojoExecutionException {
Set<Artifact> artifacts = new HashSet<Artifact>();
for (String artifact : artifactIds) {
Artifact art =
artifactFactory.createArtifactWithClassifier(groupId, artifact, version,
"jar", null);
artifacts.addAll(getDependencyArtifacts(art));
artifacts.add(art);
}
Set<Artifact> artifactsToExclude = new HashSet<Artifact>();
if (excludeIds != null) {
for (String artifact : excludeIds) {
Artifact art =
artifactFactory.createArtifactWithClassifier(groupId, artifact, version,
"jar", null);
artifacts.removeAll(getDependencyArtifacts(art));
artifacts.remove(art);
}
}
outputFile.getParentFile().mkdirs();
FileWriter w = null;
try {
w = new FileWriter(outputFile);
if (filePrefix != null && !filePrefix.isEmpty()) {
w.append(filePrefix);
w.append("\n");
}
for (Artifact artifact : artifacts) {
long size = artifact.getFile().length();
FileInputStream fd = new
FileInputStream(artifact.getFile());
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(fd, out);
fd.close();
String sha1 = DigestUtils.shaHex(out.toByteArray());
if (linePrefix != null && !linePrefix.isEmpty()) {
w.append(linePrefix);
}
if (writeFull) {
w.append(artifact.getFile().getName() + "\t" + size
+ "\tsha1:" + sha1 + "\n");
} else {
w.append(artifact.getFile().getName() + "\n");
}
}
} catch (IOException e) {
throw new MojoExecutionException("Error creating file " +
outputFile, e);
} finally {
if (w != null) {
try {
w.close();
} catch (IOException e) {
// ignore
}
}
}
}
private Set<Artifact> getDependencyArtifacts(Artifact artifact)
throws MojoExecutionException {
try {
// Make sure the artifact is resolved before we do anything
with it
getArtifactResolver().resolve(artifact,
getRemoteRepositories(), getLocalRepository());
MavenProject subProject =
getMavenProjectBuilder().buildFromRepository(artifact,
getRemoteRepositories(),
getLocalRepository());
Set<Artifact> artifacts =
subProject.createArtifacts(getArtifactFactory(), null, null);
ArtifactResolutionResult arr =
getArtifactResolver().resolveTransitively(artifacts, artifact,
getLocalRepository(), getRemoteRepositories(),
getArtifactMetadataSource(), null);
Set<Artifact> result = arr.getArtifacts();
return result;
} catch (Exception ex) {
throw new MojoExecutionException("Failed to get
dependencies", ex);
}
}
private ArtifactRepository getLocalRepository() {
return localRepository;
}
private ArtifactResolver getArtifactResolver() {
return artifactResolver;
}
private java.util.List getRemoteRepositories() {
return remoteRepositories;
}
private ArtifactFactory getArtifactFactory() {
return artifactFactory;
}
private ArtifactMetadataSource getArtifactMetadataSource() {
return artifactMetadataSource;
}
private MavenProjectBuilder getMavenProjectBuilder() {
return mavenProjectBuilder;
}
}
Tichý Miroslav napsal(a):
Abych to upresnil, programove sem myslel s vyuzitim maven API ci API jakekoliv
maven pluginy...predpokladam, ze mi nezbude nic jineho, nez zacit zkoumat
zdrojaky dependency tree pluginy, protože ta to nejakym zpusobem zvlada...
Mirek
________________________________________
From: [email protected] [mailto:[email protected]] On Behalf
Of Jakub Stonavsky
Sent: Thursday, July 30, 2009 4:14 PM
To: Java
Subject: Re: maven - jak programove ziskat zavislost artefaktu
Ahoj,
pokud ti nestaci vypis, ktery poskytuje mvn dependency:build-classpath (ten
vypise umisteni dependencies v repository, mel by to zvladnout bundle
(http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html)).
K.
2009/7/30 Tichý Miroslav <[email protected]>
Ahoj,
v maven-war-pluginu potrebuji programove ziskat zavislosti pro každý artefakt
(war), na kterem je aktualni projekt (tedy také war) zavisly. Netusite, jak na
to?
Diky
Mirek Tichý
--
Petr Ferschmann
--
SoftEU s.r.o.
Lochotínská 18, 301 00 Plzeň, Česká republika
Phone: +420 371 124 300, +420 371 124 384
E-mail: [email protected] http://www.softeu.com/
begin:vcard
fn:Petr Ferschmann
n:Ferschmann;Petr
org:SoftEU s.r.o.
adr;quoted-printable;quoted-printable;quoted-printable;quoted-printable:;;Lochot=C3=ADnsk=C3=A1 18;Plze=C5=88;Plze=C5=88sk=C3=BD;301 00;=C4=8Cesk=C3=A1 Republika
email;internet:[email protected]
tel;work:+420 377 124 340
tel;cell:+420 377 124 384
x-mozilla-html:TRUE
url:www.softeu.com
version:2.1
end:vcard