package org.apache.maven.indexer.examples; /* * 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. */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.maven.model.Model; import org.apache.maven.model.io.DefaultModelWriter; import org.apache.maven.model.io.ModelWriter; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; /** * @author mtodorov */ public class SimpleArtifactGenerator { public SimpleArtifactGenerator() { // no op } public File generateArtifact( String repositoryBasedir, String groupId, String artifactId, String version, String classifier, String extension ) throws IOException, NoSuchAlgorithmException, XmlPullParserException { File repositoryDir = new File( repositoryBasedir ); File artifactFile = new File( repositoryDir, groupId.replaceAll( "\\.", File.separator ) + File.separatorChar + artifactId + File.separatorChar + version + File.separatorChar + artifactId + "-" + version + ( classifier != null ? "-" + classifier + File.separatorChar : "" ) + "." + extension ); if ( !artifactFile.getParentFile().exists() ) { //noinspection ResultOfMethodCallIgnored artifactFile.getParentFile().mkdirs(); } createArchive( artifactFile, groupId, artifactId, version, extension ); return artifactFile; } private void createArchive( File artifactFile, String groupId, String artifactId, String version, String extension ) throws NoSuchAlgorithmException, IOException, XmlPullParserException { ZipOutputStream zos = null; try { // Make sure the artifact's parent directory exists before writing the model. //noinspection ResultOfMethodCallIgnored artifactFile.getParentFile().mkdirs(); File pomFile = new File( artifactFile.getParent(), artifactFile.getName().substring( 0, artifactFile.getName().lastIndexOf( "." ) ) + ".pom" ); zos = new ZipOutputStream( new FileOutputStream( artifactFile ) ); generatePom( pomFile, groupId, artifactId, version, extension ); addMavenPomFile( zos, pomFile, groupId, artifactId ); } finally { if ( zos != null ) { zos.close(); } } } protected void generatePom( File pomFile, String groupId, String artifactId, String version, String type ) throws IOException, XmlPullParserException, NoSuchAlgorithmException { // Make sure the artifact's parent directory exists before writing the model. //noinspection ResultOfMethodCallIgnored pomFile.getParentFile().mkdirs(); Model model = new Model(); model.setGroupId( groupId ); model.setArtifactId( artifactId ); model.setVersion( version ); model.setPackaging( type ); // This is not exactly correct. ModelWriter writer = new DefaultModelWriter(); writer.write( pomFile, null, model ); } private void addMavenPomFile( ZipOutputStream zos, File pomFile, String groupId, String artifactId ) throws IOException { ZipEntry ze = new ZipEntry( "META-INF/maven/" + groupId + "/" + artifactId + "/" + "pom.xml" ); zos.putNextEntry( ze ); FileInputStream fis = new FileInputStream( pomFile ); byte[] buffer = new byte[ 1024 ]; int len; while ( ( len = fis.read( buffer ) ) > 0 ) { zos.write( buffer, 0, len ); } fis.close(); zos.closeEntry(); } public static String convertGAVToPath( String groupId, String artifactId, String version, String classifier, String extension ) { String path = ""; path += groupId.replaceAll( "\\.", "/" ) + "/"; path += artifactId + "/"; path += version + "/"; path += artifactId + "-"; path += version; path += classifier != null ? "-" + classifier : ""; path += "." + extension; return path; } }