diff --git a/src/main/java/org/spdx/maven/CreateSpdxMojo.java b/src/main/java/org/spdx/maven/CreateSpdxMojo.java index 831e52f..695cff6 100644 --- a/src/main/java/org/spdx/maven/CreateSpdxMojo.java +++ b/src/main/java/org/spdx/maven/CreateSpdxMojo.java @@ -54,6 +54,9 @@ import org.spdx.maven.utils.SpdxV3DependencyBuilder; import org.spdx.maven.utils.SpdxV3DocumentBuilder; +import org.apache.maven.artifact.resolver.filter.ArtifactFilter; +import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter; + import java.io.File; import java.net.URI; import java.net.URISyntaxException; @@ -493,6 +496,41 @@ public class CreateSpdxMojo extends AbstractMojo @Parameter( property = "spdx.generatePurls" ) protected boolean generatePurls = true; + /** + * If true, include system scope in dependency graph + * @since 0.8.0 + */ + @Parameter( defaultValue = "true" ) + private boolean includeSystemScope; + + /** + * If true, include test scope in dependency graph + * @since 0.8.0 + */ + @Parameter( defaultValue = "true" ) + private boolean includeTestScope; + + /** + * If true, include runtime scope in dependency graph + * @since 0.8.0 + */ + @Parameter( defaultValue = "true" ) + private boolean includeRuntimeScope; + + /** + * If true, include provided scope in dependency graph + * @since 0.8.0 + */ + @Parameter( defaultValue = "true" ) + private boolean includeProvidedScope; + + /** + * If true, include compile scope in dependency graph + * @since 0.8.0 + */ + @Parameter( defaultValue = "true" ) + private boolean includeCompileScope; + public void execute() throws MojoExecutionException { if ( skip ) @@ -683,7 +721,8 @@ protected void buildSpdxDependencyInformation( AbstractDocumentBuilder builder, { ProjectBuildingRequest request = new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() ); request.setProject( mavenProject ); - DependencyNode parentNode = dependencyGraphBuilder.buildDependencyGraph( request, null ); + ArtifactFilter artifactFilter = getArtifactFilter(); + DependencyNode parentNode = dependencyGraphBuilder.buildDependencyGraph( request, artifactFilter ); dependencyBuilder.addMavenDependencies( mavenProjectBuilder, session, mavenProject, parentNode, builder.getProjectPackage() ); } @@ -1004,4 +1043,21 @@ private Set getChecksumAlgorithms() } return algorithms; } + + /** + * Create an ArtifactFilter based on the provided scopes + */ + private ArtifactFilter getArtifactFilter() + { + getLog().debug( "Creating Artifact filter" ); + List scopes = new ArrayList<>(); + if (includeCompileScope) scopes.add("compile"); + if (includeProvidedScope) scopes.add("provided"); + if (includeRuntimeScope) scopes.add("runtime"); + if (includeSystemScope) scopes.add("system"); + if (includeTestScope) scopes.add("test"); + + getLog().debug( scopes.toString() ); + return new CumulativeScopeArtifactFilter(scopes); + } } diff --git a/src/test/java/org/spdx/maven/TestWithSessionSpdxV2Mojo.java b/src/test/java/org/spdx/maven/TestWithSessionSpdxV2Mojo.java index 23d3d65..9509b03 100644 --- a/src/test/java/org/spdx/maven/TestWithSessionSpdxV2Mojo.java +++ b/src/test/java/org/spdx/maven/TestWithSessionSpdxV2Mojo.java @@ -98,6 +98,37 @@ public void testDependencies() throws Exception assertTrue( relationships.contains( "junit->hamcrest-core" ) || relationships.contains( "junit->org.hamcrest:hamcrest-core" ) ); } + @Test + public void testDependenciesExclTestScope() throws Exception + { + File pom = new File( getBasedir(), UNIT_TEST_RESOURCE_DIR + "/json-pom-dependencies-excl-test.xml" ); + SpdxDocument result = runMojoWithPom( pom ); + + Set packages = new HashSet<>(); + Set relationships = new HashSet<>(); + SpdxModelFactory.getElements( result.getModelStore(), result.getDocumentUri(), result.getCopyManager(), SpdxPackage.class ) + .forEach( ( element ) -> { + SpdxPackage pkg = (SpdxPackage) element; + try + { + packages.add( pkg.getName().get() ); + + for ( Relationship rel : pkg.getRelationships() ) + { + relationships.add( pkg.getName().get() + "->" + rel.getRelatedSpdxElement().get().getName().get() ); + } + } + catch ( InvalidSPDXAnalysisException e ) + { + throw new RuntimeException( e ); + } + }); + + assertTrue( packages.contains( "org.spdx:spdx-maven-plugin-test" ) ); + assertFalse( packages.contains( "junit" ) ); + assertFalse( packages.contains( "hamcrest-core" ) || packages.contains( "org.hamcrest:hamcrest-core" ) ); + } + // -- Configure mojo loader private SpdxDocument runMojoWithPom( File pom ) throws Exception diff --git a/src/test/resources/unit/spdx-maven-plugin-test/json-pom-dependencies-excl-test.xml b/src/test/resources/unit/spdx-maven-plugin-test/json-pom-dependencies-excl-test.xml new file mode 100644 index 0000000..4a908e6 --- /dev/null +++ b/src/test/resources/unit/spdx-maven-plugin-test/json-pom-dependencies-excl-test.xml @@ -0,0 +1,108 @@ + + 4.0.0 + + org.spdx + spdx-maven-plugin-test + 1.0-SNAPSHOT + jar + Test SPDX Plugin + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + http://spdx.org/tools + + Linux Foundation + http://www.linuxfoundation.org + + + UTF-8 + + + + + junit + junit + 4.13.1 + test + + + + + src + Test + + + resources + false + resources + + **/* + + + + META-INF + false + . + + NOTICE + LICENSE + README.txt + changelog + + + + src + + **/*.java + + + + + + Test + + **/*.java + + + + false + TestFiles + + **/* + + + + + + + org.spdx + spdx-maven-plugin + 1.0-SNAPSHOT + + + build-spdx + prepare-package + + createSPDX + + + + + target/test-classes/unit/spdx-maven-plugin-test/test.spdx.json + true + JSON + http://spdx.org/documents/spdx%20toolsv2.0%20rc1 + Apache-2.0 + true + false + + + + +