Author: andham Date: Wed Oct 29 16:33:52 2014 New Revision: 1635191 URL: http://svn.apache.org/r1635191 Log: [MSHARED-361] DefaultProjectDependencyAnalyzer.buildArtifactClassMap assumes dependencies are jar files (regression)
Added: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml (with props) maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java (with props) maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml (with props) maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java (with props) maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml (with props) Modified: maven/shared/trunk/maven-dependency-analyzer/pom.xml maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java maven/shared/trunk/maven-dependency-analyzer/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java Modified: maven/shared/trunk/maven-dependency-analyzer/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/pom.xml?rev=1635191&r1=1635190&r2=1635191&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/pom.xml (original) +++ maven/shared/trunk/maven-dependency-analyzer/pom.xml Wed Oct 29 16:33:52 2014 @@ -91,7 +91,7 @@ <dependency> <groupId>org.apache.maven.plugin-testing</groupId> <artifactId>maven-plugin-testing-tools</artifactId> - <version>1.2</version> + <version>1.3</version> <scope>test</scope> </dependency> <dependency> Modified: maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java?rev=1635191&r1=1635190&r2=1635191&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java (original) +++ maven/shared/trunk/maven-dependency-analyzer/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java Wed Oct 29 16:33:52 2014 @@ -19,11 +19,6 @@ package org.apache.maven.shared.dependen * under the License. */ -import org.apache.maven.artifact.Artifact; -import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; - import java.io.File; import java.io.IOException; import java.net.URL; @@ -37,6 +32,11 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.component.annotations.Component; +import org.codehaus.plexus.component.annotations.Requirement; + /** * @author <a href="mailto:markhob...@gmail.com">Mark Hobson</a> * @version $Id$ @@ -143,10 +143,9 @@ public class DefaultProjectDependencyAna { File file = artifact.getFile(); - if ( file != null && ( file.getName().endsWith( ".jar" ) || file.isDirectory() ) ) + if ( file != null && file.getName().endsWith( ".jar" ) ) { - //URL url = file.toURI().toURL(); - + // optimized solution for the jar case JarFile jarFile = new JarFile( file ); Enumeration<JarEntry> jarEntries = jarFile.entries(); @@ -164,8 +163,13 @@ public class DefaultProjectDependencyAna } } - // to slow - //Set<String> classes = classAnalyzer.analyze( url ); + + artifactClassMap.put( artifact, classes ); + } + else if ( file != null && file.isDirectory() ) + { + URL url = file.toURI().toURL(); + Set<String> classes = classAnalyzer.analyze( url ); artifactClassMap.put( artifact, classes ); } Modified: maven/shared/trunk/maven-dependency-analyzer/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java?rev=1635191&r1=1635190&r2=1635191&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java (original) +++ maven/shared/trunk/maven-dependency-analyzer/src/test/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzerTest.java Wed Oct 29 16:33:52 2014 @@ -213,6 +213,36 @@ public class DefaultProjectDependencyAna //assertEquals( expectedAnalysis, actualAnalysis ); } + public void testMultimoduleProject() + throws TestToolsException, ProjectDependencyAnalyzerException + { + compileProject( "multimoduleProject/pom.xml" ); + + // difficult to create multi-module project with Maven 2.x, so here's hacky solution + // to get a inter-module dependency + MavenProject project = getProject( "multimoduleProject/module2/pom.xml" ); + @SuppressWarnings( "unchecked" ) + Set<Artifact> dependencyArtifacts = project.getArtifacts(); + for ( Artifact artifact : dependencyArtifacts ) + { + if ( artifact.getArtifactId().equals( "test-module1" ) ) + { + File dir = getTestFile( "target/test-classes/", "multimoduleProject/module1/target/classes/" ); + artifact.setFile( dir ); + } + } + + ProjectDependencyAnalysis actualAnalysis = analyzer.analyze( project ); + + Artifact junit = createArtifact( "org.apache.maven.its.dependency", "test-module1", "jar", "1.0", "compile" ); + Set<Artifact> usedDeclaredArtifacts = Collections.singleton( junit ); + + ProjectDependencyAnalysis expectedAnalysis = + new ProjectDependencyAnalysis( usedDeclaredArtifacts, null, null ); + + assertEquals( expectedAnalysis, actualAnalysis ); + } + // private methods -------------------------------------------------------- private void compileProject( String pomPath ) Added: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml?rev=1635191&view=auto ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml (added) +++ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml Wed Oct 29 16:33:52 2014 @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.maven.its.dependency</groupId> + <artifactId>test-parent</artifactId> + <version>1.0</version> + </parent> + + <artifactId>test-module1</artifactId> + + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-project</artifactId> + <version>2.0.6</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>2.0.6</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + <version>2.0.6</version> + </dependency> + </dependencies> +</project> Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/pom.xml ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java?rev=1635191&view=auto ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java (added) +++ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java Wed Oct 29 16:33:52 2014 @@ -0,0 +1,32 @@ +/* + * 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. + */ +package foo; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.metadata.Metadata; +import org.apache.maven.model.Model; + +public class Main +{ + public static final String SCOPE_COMPILE = Artifact.SCOPE_COMPILE; + + public Model model = null; + + public Metadata metadata = null; +} Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module1/src/main/java/foo/Main.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml?rev=1635191&view=auto ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml (added) +++ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml Wed Oct 29 16:33:52 2014 @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.maven.its.dependency</groupId> + <artifactId>test-parent</artifactId> + <version>1.0</version> + </parent> + + <artifactId>test-module2</artifactId> + + <dependencies> + <dependency> + <groupId>org.apache.maven.its.dependency</groupId> + <artifactId>test-module1</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/pom.xml ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java?rev=1635191&view=auto ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java (added) +++ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java Wed Oct 29 16:33:52 2014 @@ -0,0 +1,24 @@ +/* + * 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. + */ +package bar; + +public class Main +{ + public foo.Main dummy = null; +} Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/module2/src/main/java/bar/Main.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml?rev=1635191&view=auto ============================================================================== --- maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml (added) +++ maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml Wed Oct 29 16:33:52 2014 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <groupId>org.apache.maven.its.dependency</groupId> + <artifactId>test-parent</artifactId> + <version>1.0</version> + <packaging>pom</packaging> + + <name>Test</name> + <description> + Test dependency:analyze on a multi-module project + </description> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <modules> + <module>module1</module> + <module>module2</module> + </modules> +</project> Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: maven/shared/trunk/maven-dependency-analyzer/src/test/resources/multimoduleProject/pom.xml ------------------------------------------------------------------------------ svn:mime-type = text/plain