diff --git a/src/main/java/net/nicoulaj/maven/plugins/checksum/artifacts/ArtifactAttacher.java b/src/main/java/net/nicoulaj/maven/plugins/checksum/artifacts/ArtifactAttacher.java index 1da2b10..e838514 100644 --- a/src/main/java/net/nicoulaj/maven/plugins/checksum/artifacts/ArtifactAttacher.java +++ b/src/main/java/net/nicoulaj/maven/plugins/checksum/artifacts/ArtifactAttacher.java @@ -1,44 +1,53 @@ -/* - * checksum-maven-plugin - http://checksum-maven-plugin.nicoulaj.net - * Copyright © 2010-2018 checksum-maven-plugin contributors - * - * 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 net.nicoulaj.maven.plugins.checksum.artifacts; - -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.MavenProjectHelper; - -import java.io.File; - -public class ArtifactAttacher implements ArtifactListener { - private final MavenProject project; - private final MavenProjectHelper projectHelper; - - public ArtifactAttacher(MavenProject project, MavenProjectHelper projectHelper) { - this.project = project; - this.projectHelper = projectHelper; - } - - @Override - public void artifactCreated(File artifact, String checksumType, String artifactType, String artifactClassifier) { - if (checksumType.startsWith(".")) { - // Project helper expects a type without leading dot (e.g. turn ".md5" into "md5"). - checksumType = checksumType.substring(1); - } - - String attachmentType = artifactType == null ? checksumType : artifactType + "." + checksumType; - - projectHelper.attachArtifact(project, attachmentType, artifactClassifier, artifact); - } -} +/* + * checksum-maven-plugin - http://checksum-maven-plugin.nicoulaj.net + * Copyright © 2010-2018 checksum-maven-plugin contributors + * + * 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 net.nicoulaj.maven.plugins.checksum.artifacts; + +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectHelper; + +import java.io.File; + +public class ArtifactAttacher implements ArtifactListener { + private final MavenProject project; + private final MavenProjectHelper projectHelper; + + public ArtifactAttacher(MavenProject project, MavenProjectHelper projectHelper) { + this.project = project; + this.projectHelper = projectHelper; + } + + @Override + public void artifactCreated(File artifact, String checksumType, String artifactType, String artifactClassifier) { + if (checksumType.startsWith(".")) { + // Project helper expects a type without leading dot (e.g. turn ".md5" into "md5"). + checksumType = checksumType.substring(1); + } + + String fileName = artifact.getName(); + int period1 = fileName.lastIndexOf('.'); // finds xxx.yyy.sha512 period in front of sha512 + int period2 = fileName.lastIndexOf('.', period1 - 1); + String attachmentType = fileName.substring(period2 + 1); // yyy.sha512 +// String attachmentType = fileType + "." + checksumType; +// System.out.println("debug artifactType: " + ((artifactType == null) ? "null" : artifactType)); +// System.out.println("debug artifactClassifier: " + artifactClassifier); +// System.out.println("debug checksumType: " + ((checksumType == null) ? "null" : checksumType)); +// System.out.println("debug derived attachmentType: " + attachmentType); +// System.out.println("debug artifact: " + artifact.getAbsolutePath()); + + projectHelper.attachArtifact(project, attachmentType, artifactClassifier, artifact); + } +} diff --git a/src/main/java/net/nicoulaj/maven/plugins/checksum/mojo/ArtifactsMojo.java b/src/main/java/net/nicoulaj/maven/plugins/checksum/mojo/ArtifactsMojo.java index e70347e..d654ae1 100644 --- a/src/main/java/net/nicoulaj/maven/plugins/checksum/mojo/ArtifactsMojo.java +++ b/src/main/java/net/nicoulaj/maven/plugins/checksum/mojo/ArtifactsMojo.java @@ -1,266 +1,285 @@ -/* - * checksum-maven-plugin - http://checksum-maven-plugin.nicoulaj.net - * Copyright © 2010-2018 checksum-maven-plugin contributors - * - * 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 net.nicoulaj.maven.plugins.checksum.mojo; +/* + * checksum-maven-plugin - http://checksum-maven-plugin.nicoulaj.net + * Copyright © 2010-2018 checksum-maven-plugin contributors + * + * 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 net.nicoulaj.maven.plugins.checksum.mojo; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.codehaus.plexus.util.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; + +/** + * Compute project artifacts checksum digests and store them in individual files and/or a summary file. + * + * @author Julien Nicoulaud + * @since 1.0 + */ +@Mojo( + name = ArtifactsMojo.NAME, + defaultPhase = LifecyclePhase.VERIFY, + requiresProject = true, + inheritByDefault = false, + threadSafe = true ) +public class ArtifactsMojo + extends AbstractChecksumMojo +{ + + /** + * The mojo name. + */ + public static final String NAME = "artifacts"; + + /** + * Indicates whether the build will store checksums in separate files (one file per algorithm per artifact). + * + * @since 1.0 + */ + @Parameter( defaultValue = "true" ) + protected boolean individualFiles; + + /** + * The directory where output files will be stored. Leave unset to have each file next to the source file. + * + * @since 1.0 + */ + @Parameter + protected String individualFilesOutputDirectory; + + /** + * Indicates whether the build will store checksums to a single CSV summary file. + * + * @since 1.0 + */ + @Parameter( defaultValue = "false" ) + protected boolean csvSummary; + + /** + * The name of the summary file created if the option is activated. + * + * @see #csvSummary + * @since 1.0 + */ + @Parameter( defaultValue = "artifacts-checksums.csv" ) + protected String csvSummaryFile; + + /** + * Indicates whether the build will store checksums to a single XML summary file. + * + * @since 1.0 + */ + @Parameter( defaultValue = "false" ) + protected boolean xmlSummary; + + /** + * The name of the summary file created if the option is activated. + * + * @see #xmlSummary + * @since 1.0 + */ + @Parameter( defaultValue = "artifacts-checksums.xml" ) + protected String xmlSummaryFile; + + /** + * Indicates whether the build will store checksums to a single shasum summary file. + * + * @since 1.3 + */ + @Parameter( defaultValue = "false" ) + protected boolean shasumSummary; + + /** + * The name of the summary file created if the option is activated. + * + * @see #shasumSummary + * @since 1.3 + */ + @Parameter( defaultValue = "artifacts-checksums.sha" ) + protected String shasumSummaryFile; + + /** + * Append the artifact filename in the generated checksum file. + * This parameter require the parameter individualFiles be equal to true. + * + * @see #individualFiles + * @since 1.4 + */ + @Parameter (defaultValue = "false") + protected boolean appendFilename; + + /** + * Constructor. + */ + public ArtifactsMojo() { + super(false, true, true); + } + + /** + * Build the list of files from which digests should be generated. + * + *

The list is composed of the project main and attached artifacts.

+ * + * @return the list of files that should be processed. + * @see #hasValidFile(org.apache.maven.artifact.Artifact) + */ + @Override + protected List getFilesToProcess() + { + List files = new LinkedList(); + + // add pom (copy to target) + File pomToSign = new File( project.getBuild().getDirectory(), project.getBuild().getFinalName() + ".pom" ); -import org.apache.maven.artifact.Artifact; -import org.apache.maven.plugins.annotations.LifecyclePhase; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; - -import java.util.LinkedList; -import java.util.List; - -/** - * Compute project artifacts checksum digests and store them in individual files and/or a summary file. - * - * @author Julien Nicoulaud - * @since 1.0 - */ -@Mojo( - name = ArtifactsMojo.NAME, - defaultPhase = LifecyclePhase.VERIFY, - requiresProject = true, - inheritByDefault = false, - threadSafe = true ) -public class ArtifactsMojo - extends AbstractChecksumMojo -{ - - /** - * The mojo name. - */ - public static final String NAME = "artifacts"; - - /** - * Indicates whether the build will store checksums in separate files (one file per algorithm per artifact). - * - * @since 1.0 - */ - @Parameter( defaultValue = "true" ) - protected boolean individualFiles; - - /** - * The directory where output files will be stored. Leave unset to have each file next to the source file. - * - * @since 1.0 - */ - @Parameter - protected String individualFilesOutputDirectory; - - /** - * Indicates whether the build will store checksums to a single CSV summary file. - * - * @since 1.0 - */ - @Parameter( defaultValue = "false" ) - protected boolean csvSummary; - - /** - * The name of the summary file created if the option is activated. - * - * @see #csvSummary - * @since 1.0 - */ - @Parameter( defaultValue = "artifacts-checksums.csv" ) - protected String csvSummaryFile; - - /** - * Indicates whether the build will store checksums to a single XML summary file. - * - * @since 1.0 - */ - @Parameter( defaultValue = "false" ) - protected boolean xmlSummary; - - /** - * The name of the summary file created if the option is activated. - * - * @see #xmlSummary - * @since 1.0 - */ - @Parameter( defaultValue = "artifacts-checksums.xml" ) - protected String xmlSummaryFile; - - /** - * Indicates whether the build will store checksums to a single shasum summary file. - * - * @since 1.3 - */ - @Parameter( defaultValue = "false" ) - protected boolean shasumSummary; - - /** - * The name of the summary file created if the option is activated. - * - * @see #shasumSummary - * @since 1.3 - */ - @Parameter( defaultValue = "artifacts-checksums.sha" ) - protected String shasumSummaryFile; - - /** - * Append the artifact filename in the generated checksum file. - * This parameter require the parameter individualFiles be equal to true. - * - * @see #individualFiles - * @since 1.4 - */ - @Parameter (defaultValue = "false") - protected boolean appendFilename; - - /** - * Constructor. - */ - public ArtifactsMojo() { - super(false, true, true); - } - - /** - * Build the list of files from which digests should be generated. - * - *

The list is composed of the project main and attached artifacts.

- * - * @return the list of files that should be processed. - * @see #hasValidFile(org.apache.maven.artifact.Artifact) - */ - @Override - protected List getFilesToProcess() - { - List files = new LinkedList(); - - // Add project main artifact. - if ( hasValidFile( project.getArtifact() ) ) + try { - files.add( new ChecksumFile( "", project.getArtifact().getFile(), project.getArtifact().getType(),null ) ); + FileUtils.copyFile( project.getFile(), pomToSign ); } - - // Add projects attached. - if ( project.getAttachedArtifacts() != null ) + catch ( IOException e ) { - for ( Artifact artifact : (List) project.getAttachedArtifacts() ) - { - if ( hasValidFile( artifact ) ) - { - files.add( new ChecksumFile( "", artifact.getFile(), artifact.getType(), artifact.getClassifier() ) ); - } - } + throw new RuntimeException( new MojoExecutionException( "Error copying POM for signing.", e ) ); } - return files; - } + + files.add( new ChecksumFile( "", pomToSign, "pom", null ) ); - /** - * Decide whether the artifact file should be processed. - * - *

Excludes the project POM file and any file outside the build directory, because this could lead to writing - * files on the user local repository for example.

- * - * @param artifact the artifact to check. - * @return true if the artifact should be included in the files to process. - */ - protected boolean hasValidFile( Artifact artifact ) - { - // Make sure the file exists. - boolean hasValidFile = artifact != null && artifact.getFile() != null && artifact.getFile().exists(); - - // Exclude project POM file. - hasValidFile = hasValidFile && !artifact.getFile().getPath().equals( project.getFile().getPath() ); - - // Exclude files outside of build directory. - hasValidFile = hasValidFile && artifact.getFile().getPath().startsWith( project.getBuild().getDirectory() ); - - return hasValidFile; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean isIndividualFiles() - { - return individualFiles; - } - - /** - * {@inheritDoc} - */ - @Override - protected String getIndividualFilesOutputDirectory() - { - return individualFilesOutputDirectory; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean isAppendFilename(){ - return this.appendFilename; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean isCsvSummary() - { - return csvSummary; - } - - /** - * {@inheritDoc} - */ - protected String getCsvSummaryFile() - { - return csvSummaryFile; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean isXmlSummary() - { - return xmlSummary; - } - - /** - * {@inheritDoc} - */ - @Override - protected String getXmlSummaryFile() - { - return xmlSummaryFile; - } - - /** - * {@inheritDoc} - */ - @Override - protected boolean isShasumSummary() - { - return shasumSummary; - } - - /** - * {@inheritDoc} - */ - @Override - protected String getShasumSummaryFile() - { - return shasumSummaryFile; - } -} + // Add project main artifact. + if ( hasValidFile( project.getArtifact() ) ) + { + files.add( new ChecksumFile( "", project.getArtifact().getFile(), project.getArtifact().getType(), + project.getArtifact().getClassifier() ) ); + } + + // Add projects attached. + if ( project.getAttachedArtifacts() != null ) + { + for ( Artifact artifact : (List) project.getAttachedArtifacts() ) + { + if ( hasValidFile( artifact ) ) + { + files.add( new ChecksumFile( "", artifact.getFile(), artifact.getType(), artifact.getClassifier() ) ); + } + } + } + return files; + } + + /** + * Decide whether the artifact file should be processed. + * + *

Excludes the project POM file and any file outside the build directory, because this could lead to writing + * files on the user local repository for example.

+ * + * @param artifact the artifact to check. + * @return true if the artifact should be included in the files to process. + */ + protected boolean hasValidFile( Artifact artifact ) + { + // Make sure the file exists. + boolean hasValidFile = artifact != null && artifact.getFile() != null && artifact.getFile().exists(); + + // Exclude project POM file. + hasValidFile = hasValidFile && !artifact.getFile().getPath().equals( project.getFile().getPath() ); + + // Exclude files outside of build directory. + hasValidFile = hasValidFile && artifact.getFile().getPath().startsWith( project.getBuild().getDirectory() ); + + return hasValidFile; + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean isIndividualFiles() + { + return individualFiles; + } + + /** + * {@inheritDoc} + */ + @Override + protected String getIndividualFilesOutputDirectory() + { + return individualFilesOutputDirectory; + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean isAppendFilename(){ + return this.appendFilename; + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean isCsvSummary() + { + return csvSummary; + } + + /** + * {@inheritDoc} + */ + protected String getCsvSummaryFile() + { + return csvSummaryFile; + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean isXmlSummary() + { + return xmlSummary; + } + + /** + * {@inheritDoc} + */ + @Override + protected String getXmlSummaryFile() + { + return xmlSummaryFile; + } + + /** + * {@inheritDoc} + */ + @Override + protected boolean isShasumSummary() + { + return shasumSummary; + } + + /** + * {@inheritDoc} + */ + @Override + protected String getShasumSummaryFile() + { + return shasumSummaryFile; + } +}