Skip to content

Commit cdcc31e

Browse files
authored
Merge pull request #132 from krrish175-byte/fix/issue-85-include-field-ignored
fix: respect includes/excludes in Maven resources configuration
2 parents 1d8c956 + e496b94 commit cdcc31e

3 files changed

Lines changed: 70 additions & 12 deletions

File tree

src/main/scala/bloop/integrations/maven/MojoImplementation.scala

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.apache.maven.plugin.MojoExecution
2020
import org.apache.maven.plugin.logging.Log
2121
import org.apache.maven.project.MavenProject
2222
import org.codehaus.plexus.util.xml.Xpp3Dom
23+
import org.codehaus.plexus.util.DirectoryScanner
2324
import org.eclipse.aether.artifact.DefaultArtifact
2425
import org.eclipse.aether.artifact.DefaultArtifactType
2526
import org.eclipse.aether.resolution.ArtifactRequest
@@ -307,8 +308,21 @@ object MojoImplementation {
307308
val jvmArgs = launcher.map(_.getJvmArgs.toList).getOrElse(List.empty)
308309
val mainClass = launcher.map(_.getMainClass).filter(_.nonEmpty)
309310
val platform = Some(Config.Platform.Jvm(Config.JvmConfig(javaHome, jvmArgs), mainClass, None, None, None))
310-
val resources = Some(resources0.asScala.toList.flatMap{
311-
case a: Resource => Option(Paths.get(a.getDirectory()))
311+
val resources = Some(resources0.asScala.toList.flatMap {
312+
case a: Resource =>
313+
val dir = Paths.get(a.getDirectory())
314+
if (Files.exists(dir)) {
315+
if (a.getIncludes().isEmpty() && a.getExcludes().isEmpty()) {
316+
Some(dir)
317+
} else {
318+
val scanner = new DirectoryScanner()
319+
scanner.setBasedir(a.getDirectory())
320+
scanner.setIncludes(a.getIncludes().toArray(new Array[String](0)))
321+
scanner.setExcludes(a.getExcludes().toArray(new Array[String](0)))
322+
scanner.scan()
323+
scanner.getIncludedFiles().map(f => dir.resolve(f))
324+
}
325+
} else None
312326
case _ => None
313327
})
314328
val project = Config.Project(name, baseDirectory, Some(root.toPath), sourceDirs, None, None, fullDependencies, classpath, out, classesDir, resources, `scala`, java, sbt, test, platform, resolution, Some(tags), None)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>bloop.test</groupId>
6+
<artifactId>issue_85</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<packaging>jar</packaging>
9+
10+
<name>issue-85-test</name>
11+
12+
<build>
13+
<resources>
14+
<resource>
15+
<directory>${project.basedir}</directory>
16+
<includes>
17+
<include>LICENSE</include>
18+
<include>NOTICE</include>
19+
</includes>
20+
</resource>
21+
</resources>
22+
</build>
23+
</project>

src/test/scala/bloop/integrations/maven/MavenConfigGenerationTest.scala

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import java.nio.file.Path
88
import java.nio.file.Paths
99
import java.nio.file.StandardCopyOption
1010

11-
import scala.sys.process.ProcessLogger
1211
import scala.util.Try
1312
import scala.util.control.NonFatal
1413

@@ -281,20 +280,20 @@ class MavenConfigGenerationTest extends BaseConfigSuite {
281280
}
282281
}
283282

284-
private def check(testProject: String, submodules: List[String] = Nil)(
283+
private def check(testProject: String, submodules: List[String] = Nil, extraContent: Map[String, String] = Map.empty)(
285284
checking: (Config.File, String, List[Config.File]) => Unit
286285
): Unit = {
287286
println(s"Checking $testProject")
288-
def nameFromDirectory(projectString: String) =
289-
Paths.get(projectString).getParent().getFileName().toString()
290287
val tempDir = Files.createTempDirectory("mavenBloop")
291288
val outFile = copyFromResource(tempDir, testProject)
289+
extraContent.foreach { case (relativePath, content) =>
290+
val p = tempDir.resolve(relativePath)
291+
Files.createDirectories(p.getParent)
292+
Files.write(p, content.getBytes("UTF-8"))
293+
}
292294
submodules.foreach(copyFromResource(tempDir, _))
293295
val wrapperJar = copyFromResource(tempDir, s"maven-wrapper.jar")
294-
val wrapperPropertiesFile = copyFromResource(tempDir, s"maven-wrapper.properties")
295-
296-
// val all = Files.list(tempDir).collect(Collectors.toList())
297-
import sys.process._
296+
copyFromResource(tempDir, s"maven-wrapper.properties")
298297

299298
val javaHome = Paths.get(System.getProperty("java.home"))
300299
val javaArgs = List[String](
@@ -360,8 +359,6 @@ class MavenConfigGenerationTest extends BaseConfigSuite {
360359

361360
private def exec(cmd: Seq[String], cwd: File): Try[String] = {
362361
Try {
363-
val lastError = new StringBuilder
364-
val swallowStderr = ProcessLogger(_ => (), err => { lastError.append(err); () })
365362
val processBuilder = new ProcessBuilder()
366363
val out = new StringBuilder()
367364
processBuilder.directory(cwd)
@@ -380,4 +377,28 @@ class MavenConfigGenerationTest extends BaseConfigSuite {
380377
}
381378
}
382379

380+
381+
382+
@Test
383+
def issue85() = {
384+
check(
385+
"issue_85/pom.xml",
386+
extraContent = Map(
387+
"issue_85/LICENSE" -> "LICENSE CONTENT",
388+
"issue_85/NOTICE" -> "NOTICE CONTENT"
389+
)
390+
) { (configFile, projectName, subprojects) =>
391+
assert(subprojects.isEmpty)
392+
val resources = configFile.project.resources.getOrElse(Nil)
393+
val license = resources.find(_.toString.endsWith("LICENSE"))
394+
val notice = resources.find(_.toString.endsWith("NOTICE"))
395+
assert(license.isDefined, "LICENSE file should be included in resources")
396+
assert(notice.isDefined, "NOTICE file should be included in resources")
397+
398+
val baseDirectory = configFile.project.directory.toAbsolutePath
399+
val hasBaseDir = resources.exists(_.toAbsolutePath == baseDirectory)
400+
assert(!hasBaseDir, s"Base directory $baseDirectory should NOT be in resources when includes are specified")
401+
}
402+
}
403+
383404
}

0 commit comments

Comments
 (0)