Skip to content

Commit 75528c3

Browse files
committed
fix: export maven/gradle should not touch default packages
1 parent 62b9226 commit 75528c3

File tree

4 files changed

+56
-36
lines changed

4 files changed

+56
-36
lines changed

src/main/java/dev/jbang/cli/Export.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ int apply(BuildContext ctx) throws IOException {
543543

544544
if (group == null) {
545545
group = "org.example.project";
546+
info("No explicit group found, using " + group + " as fallback.");
546547
}
547548
artifact = artifact != null ? artifact
548549
: Util.getBaseName(Objects.requireNonNull(prj.getResourceRef().getFile()).getFileName().toString());
@@ -551,6 +552,8 @@ int apply(BuildContext ctx) throws IOException {
551552
createProjectForExport(ctx, projectDir);
552553

553554
info("Exported as " + getType() + " project to " + projectDir);
555+
info("Export to " + getType() + " is a best-effort to try match JBang build.");
556+
info("If something can be improved please open issue at open an issue at https://github.com/jbangdev/jbang/issues with reproducer.");
554557
return EXIT_OK;
555558
}
556559

@@ -560,13 +563,10 @@ private void createProjectForExport(BuildContext ctx, Path projectDir) throws IO
560563

561564
// Sources
562565
Path srcJavaDir = projectDir.resolve("src/main/java");
563-
String srcPackageName = group + "." + artifact;
564-
Path srcPackageDir = srcJavaDir.resolve(srcPackageName.replace(".", "/"));
565-
Util.mkdirs(srcPackageDir);
566566

567567
String fullClassName = "";
568568
for (ResourceRef sourceRef : prj.getMainSourceSet().getSources()) {
569-
Path destFile = copySource(sourceRef, srcJavaDir, srcPackageDir, srcPackageName);
569+
Path destFile = copySource(sourceRef, srcJavaDir);
570570
if (sourceRef.equals(prj.getResourceRef())) {
571571
String mainFileName = Util.unkebabify(destFile.getFileName().toString());
572572
Optional<String> mainPackageName = Util.getSourcePackage(Util.readString(destFile));
@@ -586,7 +586,7 @@ private void createProjectForExport(BuildContext ctx, Path projectDir) throws IO
586586
renderBuildFile(ctx, projectDir, fullClassName);
587587
}
588588

589-
private Path copySource(ResourceRef sourceRef, Path srcJavaDir, Path srcPackageDir, String srcPackageName)
589+
private Path copySource(ResourceRef sourceRef, Path srcJavaDir)
590590
throws IOException {
591591
Path srcFile = Objects.requireNonNull(sourceRef.getFile());
592592
Source src = Source.forResourceRef(sourceRef, Function.identity());
@@ -598,20 +598,13 @@ private Path copySource(ResourceRef sourceRef, Path srcJavaDir, Path srcPackageD
598598
destFile = packageDir.resolve(fileName);
599599
Files.copy(srcFile, destFile);
600600
} else {
601-
destFile = srcPackageDir.resolve(fileName);
601+
destFile = srcJavaDir.resolve(fileName);
602+
Files.createDirectories(destFile.getParent());
602603
Files.copy(srcFile, destFile);
603-
prependPackage(destFile, srcPackageName);
604604
}
605605
return destFile;
606606
}
607607

608-
private void prependPackage(Path source, String packageName) throws IOException {
609-
String content = "package " + packageName + ";" + System.lineSeparator()
610-
+ System.lineSeparator()
611-
+ Util.readString(source);
612-
Util.writeString(source, content);
613-
}
614-
615608
abstract String getType();
616609

617610
abstract void renderBuildFile(BuildContext ctx, Path projectDir, String fullClassName) throws IOException;

src/main/resources/export-build.qute.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ java {
2424
}
2525
{/if}
2626

27+
{#if !gradledependencies.empty}
2728
dependencies {
2829
{#for item in gradledependencies}
2930
{item}
3031
{/for}
3132
}
33+
{/if}
3234

3335
application {
3436
mainClass = '{fullClassName}'

src/main/resources/export-pom.qute.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
</dependencies>
3030
</dependencyManagement>
3131
{/if}
32+
{#if !dependencies.empty}
3233
<dependencies>
3334
{#for item in dependencies}
3435
<dependency>
@@ -41,6 +42,7 @@
4142
</dependency>
4243
{/for}
4344
</dependencies>
45+
{/if}
4446
{#if !repositories.empty}
4547
<repositories>
4648
{#for item in repositories}

src/test/java/dev/jbang/cli/TestExport.java

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -202,16 +202,15 @@ void testExportGradleProject() throws Exception {
202202
CaptureResult result = checkedRun(null, "export", "gradle", "--force", "-O", outFile.toString(), src);
203203
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
204204
Path targetSrcPath = outFile.toPath()
205-
.resolve("src/main/java/org/example/project/classpath_log/classpath_log.java");
205+
.resolve("src/main/java/classpath_log.java");
206206
assertThat(targetSrcPath.toFile(), anExistingFile());
207207
String targetSrc = Util.readString(targetSrcPath);
208-
assertThat(targetSrc, containsString("package org.example.project.classpath_log;"));
209208
Path buildPath = outFile.toPath().resolve("build.gradle");
210209
assertThat(buildPath.toFile(), anExistingFile());
211210
String build = Util.readString(buildPath);
212211
assertThat(build, containsString("implementation 'log4j:log4j:1.2.17'"));
213212
assertThat(build, not(containsString("languageVersion = JavaLanguageVersion.of")));
214-
assertThat(build, containsString("mainClass = 'org.example.project.classpath_log.classpath_log'"));
213+
assertThat(build, containsString("mainClass = 'classpath_log'"));
215214
}
216215

217216
@Test
@@ -223,16 +222,16 @@ void testExportGradleProjectWithGAV() throws Exception {
223222
"-g", "dev.jbang.test", "-a", "app", "-v", "1.2.3", src);
224223
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
225224
Path targetSrcPath = outFile.toPath()
226-
.resolve("src/main/java/dev/jbang/test/app/classpath_log.java");
225+
.resolve("src/main/java/classpath_log.java");
227226
assertThat(targetSrcPath.toFile(), anExistingFile());
228227
String targetSrc = Util.readString(targetSrcPath);
229-
assertThat(targetSrc, containsString("package dev.jbang.test.app;"));
228+
assertThat(targetSrc, not(containsString("package ")));
230229
Path buildPath = outFile.toPath().resolve("build.gradle");
231230
assertThat(buildPath.toFile(), anExistingFile());
232231
String build = Util.readString(buildPath);
233232
assertThat(build, containsString("implementation 'log4j:log4j:1.2.17'"));
234233
assertThat(build, not(containsString("languageVersion = JavaLanguageVersion.of")));
235-
assertThat(build, containsString("mainClass = 'dev.jbang.test.app.classpath_log'"));
234+
assertThat(build, containsString("mainClass = 'classpath_log'"));
236235
}
237236

238237
@Test
@@ -244,18 +243,18 @@ void testExportGradleProjectWithBOM() throws Exception {
244243
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
245244
Path targetSrcPath = outFile.toPath()
246245
.resolve(
247-
"src/main/java/org/example/project/classpath_log_bom/classpath_log_bom.java");
246+
"src/main/java/classpath_log_bom.java");
248247
assertThat(targetSrcPath.toFile(), anExistingFile());
249248
String targetSrc = Util.readString(targetSrcPath);
250-
assertThat(targetSrc, containsString("package org.example.project.classpath_log_bom;"));
249+
assertThat(targetSrc, not(containsString("package ")));
251250
Path buildPath = outFile.toPath().resolve("build.gradle");
252251
assertThat(buildPath.toFile(), anExistingFile());
253252
String build = Util.readString(buildPath);
254253
assertThat(build, containsString("implementation platform ('org.apache.logging.log4j:log4j-bom:2.24.3')"));
255254
assertThat(build, containsString("implementation 'org.apache.logging.log4j:log4j-api'"));
256255
assertThat(build, containsString("implementation 'org.apache.logging.log4j:log4j-core'"));
257256
assertThat(build, not(containsString("languageVersion = JavaLanguageVersion.of")));
258-
assertThat(build, containsString("mainClass = 'org.example.project.classpath_log_bom.classpath_log_bom'"));
257+
assertThat(build, containsString("mainClass = 'classpath_log_bom'"));
259258
}
260259

261260
@Test
@@ -267,13 +266,13 @@ void testExportGradleProjectWithTags() throws Exception {
267266
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
268267

269268
Path targetSrcPath = outFile.toPath()
270-
.resolve("src/main/java/org/example/exporttags/exporttags.java");
269+
.resolve("src/main/java/exporttags.java");
271270
assertThat(targetSrcPath.toFile(), anExistingFile());
272271
String targetSrc = Util.readString(targetSrcPath);
273-
assertThat(targetSrc, containsString("package org.example.exporttags;"));
272+
assertThat(targetSrc, not(startsWith("package ")));
274273

275274
Path src1Path = outFile .toPath()
276-
.resolve("src/main/java/org/example/exporttags/Two.java");
275+
.resolve("src/main/java/Two.java");
277276
assertThat(src1Path.toFile(), anExistingFile());
278277
Path nested1Path = outFile .toPath()
279278
.resolve("src/main/java/nested/NestedOne.java");
@@ -305,7 +304,7 @@ void testExportGradleProjectWithTags() throws Exception {
305304
assertThat(build, not(containsString("JavaLanguageVersion.of(11)")));
306305
assertThat(build, not(containsString("JavaLanguageVersion.of(17)")));
307306
assertThat(build, not(containsString("JavaLanguageVersion.of(21+)")));
308-
assertThat(build, containsString("mainClass = 'org.example.exporttags.exporttags'"));
307+
assertThat(build, containsString("mainClass = 'exporttags'"));
309308
}
310309

311310
@Test
@@ -316,10 +315,10 @@ void testExportMavenProject() throws Exception {
316315
CaptureResult result = checkedRun(null, "export", "maven", "--force", "-O", outFile.toString(), src);
317316
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
318317
Path targetSrcPath = outFile.toPath()
319-
.resolve("src/main/java/org/example/project/classpath_log/classpath_log.java");
318+
.resolve("src/main/java/classpath_log.java");
320319
assertThat(targetSrcPath.toFile(), anExistingFile());
321320
String targetSrc = Util.readString(targetSrcPath);
322-
assertThat(targetSrc, containsString("package org.example.project.classpath_log;"));
321+
assertThat(targetSrc, not(containsString("package org.example.project.classpath_log;")));
323322
Path pomPath = outFile.toPath().resolve("pom.xml");
324323
assertThat(pomPath.toFile(), anExistingFile());
325324
String pom = Util.readString(pomPath);
@@ -336,6 +335,30 @@ void testExportMavenProject() throws Exception {
336335
assertThat(pom, not(containsString("<repositories>")));
337336
}
338337

338+
@Test
339+
void testExportMavenProjectWithPackages() throws Exception {
340+
String src = examplesTestFolder.resolve("RootOne.java").toString();
341+
File outFile = jbangTempDir.resolve("target").toFile();
342+
outFile.mkdirs();
343+
CaptureResult result = checkedRun(null, "export", "maven", "--force", "-O", outFile.toString(), src);
344+
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
345+
Path targetSrcPath = outFile.toPath()
346+
.resolve("src/main/java/RootOne.java");
347+
assertThat(targetSrcPath.toFile(), anExistingFile());
348+
String targetSrc = Util.readString(targetSrcPath);
349+
assertThat(targetSrc, not(containsString("package org.example.project.classpath_log;")));
350+
Path pomPath = outFile.toPath().resolve("pom.xml");
351+
assertThat(pomPath.toFile(), anExistingFile());
352+
String pom = Util.readString(pomPath);
353+
assertThat(pom, stringContainsInOrder(
354+
"<groupId>org.example.project</groupId>",
355+
"<artifactId>RootOne</artifactId>",
356+
"<version>999-SNAPSHOT</version>"));
357+
assertThat(pom, not(containsString("<dependencies>")));
358+
assertThat(pom, not(containsString("<properties>")));
359+
assertThat(pom, not(containsString("<dependencyManagement>")));
360+
assertThat(pom, not(containsString("<repositories>")));
361+
}
339362
@Test
340363
void testExportMavenProjectWithGAV() throws Exception {
341364
String src = examplesTestFolder.resolve("classpath_log.java").toString();
@@ -345,10 +368,10 @@ void testExportMavenProjectWithGAV() throws Exception {
345368
"-g", "dev.jbang.test", "-a", "app", "-v", "1.2.3", src);
346369
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
347370
Path targetSrcPath = outFile.toPath()
348-
.resolve("src/main/java/dev/jbang/test/app/classpath_log.java");
371+
.resolve("src/main/java/classpath_log.java");
349372
assertThat(targetSrcPath.toFile(), anExistingFile());
350373
String targetSrc = Util.readString(targetSrcPath);
351-
assertThat(targetSrc, containsString("package dev.jbang.test.app;"));
374+
assertThat(targetSrc, not(containsString("package ")));
352375
Path pomPath = outFile.toPath().resolve("pom.xml");
353376
assertThat(pomPath.toFile(), anExistingFile());
354377
String pom = Util.readString(pomPath);
@@ -374,10 +397,10 @@ void testExportMavenProjectWithBOM() throws Exception {
374397
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
375398
Path targetSrcPath = outFile.toPath()
376399
.resolve(
377-
"src/main/java/org/example/project/classpath_log_bom/classpath_log_bom.java");
400+
"src/main/java/classpath_log_bom.java");
378401
assertThat(targetSrcPath.toFile(), anExistingFile());
379402
String targetSrc = Util.readString(targetSrcPath);
380-
assertThat(targetSrc, containsString("package org.example.project.classpath_log_bom;"));
403+
assertThat(targetSrc, not(containsString("package org.example.project.classpath_log_bom;")));
381404
Path pomPath = outFile.toPath().resolve("pom.xml");
382405
assertThat(pomPath.toFile(), anExistingFile());
383406
String pom = Util.readString(pomPath);
@@ -407,13 +430,13 @@ void testExportMavenProjectWithTags() throws Exception {
407430
assertThat(result.result, equalTo(BaseCommand.EXIT_OK));
408431

409432
Path targetSrcPath = outFile.toPath()
410-
.resolve("src/main/java/org/example/exporttags/exporttags.java");
433+
.resolve("src/main/java/exporttags.java");
411434
assertThat(targetSrcPath.toFile(), anExistingFile());
412435
String targetSrc = Util.readString(targetSrcPath);
413-
assertThat(targetSrc, containsString("package org.example.exporttags;"));
436+
assertThat(targetSrc, not(containsString("package org.example.exporttags;")));
414437

415438
Path src1Path = outFile .toPath()
416-
.resolve("src/main/java/org/example/exporttags/Two.java");
439+
.resolve("src/main/java/Two.java");
417440
assertThat(src1Path.toFile(), anExistingFile());
418441
Path nested1Path = outFile .toPath()
419442
.resolve("src/main/java/nested/NestedOne.java");

0 commit comments

Comments
 (0)