Obavam se, ze takto zjistim zavislosti pro cely projekt a nikoliv pro jednotlive artefakty, na nichž je projekt zavisly.
Kazdopadne diky Miroslav Tichý ________________________________________ From: konference-boun...@java.cz [mailto:konference-boun...@java.cz] On Behalf Of Petr Prochazka Sent: Friday, July 31, 2009 2:13 PM To: Java Subject: Re: maven - jak programove ziskat zavislost artefaktu IMHO nestacilo by Set deps = project.getArtifacts(); ? Tim by ziskal vsechny tranzitivni dependencies, pokud by je potreboval filtrovat, staci vyuzit triduorg.apache.maven.shared.artifact.filter.collection.FilterArtifacts. Petr Prochazka On Fri, Jul 31, 2009 at 1:49 PM, Petr Ferschmann <pferschm...@softeu.com> wrote: 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: konference-boun...@java.cz [mailto:konference-boun...@java.cz] 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 <mti...@gpe.cz> 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: pferschm...@softeu.com http://www.softeu.com/