mirror of
https://github.com/rife2/bld
synced 2026-06-27 22:27:47 +02:00
#67 : add verbose flag
This commit is contained in:
parent
10a8e6133b
commit
7ee353ede0
|
|
@ -37,10 +37,13 @@ public class BuildExecutor {
|
|||
private static final String ARG_HELP3 = "-?";
|
||||
private static final String ARG_STACKTRACE1 = "--stacktrace";
|
||||
private static final String ARG_STACKTRACE2 = "-s";
|
||||
private static final String ARG_VERBOSE1 = "--verbose";
|
||||
private static final String ARG_VERBOSE2 = "-v";
|
||||
|
||||
private final HierarchicalProperties properties_;
|
||||
private List<String> arguments_ = Collections.emptyList();
|
||||
private boolean offline_ = false;
|
||||
private boolean verbose_ = false;
|
||||
private Map<String, CommandDefinition> buildCommands_ = null;
|
||||
private Map<String, String> buildAliases_ = null;
|
||||
private final AtomicReference<String> currentCommandName_ = new AtomicReference<>();
|
||||
|
|
@ -135,6 +138,18 @@ public class BuildExecutor {
|
|||
return offline_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the bld execution should output detailed information
|
||||
* about the operations it performs.
|
||||
*
|
||||
* @return {@code true} if the execution is verbose;
|
||||
* or {@code false} otherwise
|
||||
* @since 2.3.1
|
||||
*/
|
||||
public boolean verbose() {
|
||||
return verbose_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the properties uses for bld execution.
|
||||
*
|
||||
|
|
@ -227,6 +242,7 @@ public class BuildExecutor {
|
|||
var show_help = false;
|
||||
show_help |= arguments_.removeAll(List.of(ARG_HELP1, ARG_HELP2, ARG_HELP3));
|
||||
showStacktrace = arguments_.removeAll(List.of(ARG_STACKTRACE1, ARG_STACKTRACE2));
|
||||
verbose_ = arguments_.removeAll(List.of(ARG_VERBOSE1, ARG_VERBOSE2));
|
||||
|
||||
if (show_help) {
|
||||
new HelpOperation(this, Collections.emptyList()).execute();
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ public class Cli extends BuildExecutor {
|
|||
@BuildCommand(help = CreateHelp.class)
|
||||
public void create()
|
||||
throws Exception {
|
||||
createOperation_.fromArguments(arguments()).execute();
|
||||
createOperation_.fromArguments(arguments()).verbose(verbose()).execute();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -44,7 +44,7 @@ public class Cli extends BuildExecutor {
|
|||
@BuildCommand(value = "create-app", alias = "create-blank", help = CreateAppHelp.class)
|
||||
public void createApp()
|
||||
throws Exception {
|
||||
createAppOperation_.executeOnce(() -> createAppOperation_.fromArguments(arguments()));
|
||||
createAppOperation_.executeOnce(() -> createAppOperation_.verbose(verbose()).fromArguments(arguments()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -56,7 +56,7 @@ public class Cli extends BuildExecutor {
|
|||
@BuildCommand(value = "create-base", help = CreateBaseHelp.class)
|
||||
public void createBase()
|
||||
throws Exception {
|
||||
createBaseOperation_.executeOnce(() -> createBaseOperation_.fromArguments(arguments()));
|
||||
createBaseOperation_.executeOnce(() -> createBaseOperation_.verbose(verbose()).fromArguments(arguments()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -68,7 +68,7 @@ public class Cli extends BuildExecutor {
|
|||
@BuildCommand(value = "create-lib", help = CreateLibHelp.class)
|
||||
public void createLib()
|
||||
throws Exception {
|
||||
createLibOperation_.executeOnce(() -> createLibOperation_.fromArguments(arguments()));
|
||||
createLibOperation_.executeOnce(() -> createLibOperation_.verbose(verbose()).fromArguments(arguments()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -80,7 +80,7 @@ public class Cli extends BuildExecutor {
|
|||
@BuildCommand(value = "create-rife2", help = CreateRife2Help.class)
|
||||
public void createRife2()
|
||||
throws Exception {
|
||||
createRife2Operation_.executeOnce(() -> createRife2Operation_.fromArguments(arguments()));
|
||||
createRife2Operation_.executeOnce(() -> createRife2Operation_.verbose(verbose()).fromArguments(arguments()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ public class Project extends BaseProject {
|
|||
public void jarSources()
|
||||
throws Exception {
|
||||
jarSourcesOperation().executeOnce(() -> jarSourcesOperation()
|
||||
.verbose(verbose())
|
||||
.manifestAttributes(Map.of(Attributes.Name.MANIFEST_VERSION, "1.0"))
|
||||
.sourceDirectories(List.of(srcMainJavaDirectory()))
|
||||
.destinationDirectory(buildDistDirectory())
|
||||
|
|
@ -163,7 +164,9 @@ public class Project extends BaseProject {
|
|||
throws Exception {
|
||||
compile();
|
||||
javadoc();
|
||||
jarJavadocOperation().executeOnce(() -> jarJavadocOperation().manifestAttributes(Map.of(Attributes.Name.MANIFEST_VERSION, "1.0"))
|
||||
jarJavadocOperation().executeOnce(() -> jarJavadocOperation()
|
||||
.verbose(verbose())
|
||||
.manifestAttributes(Map.of(Attributes.Name.MANIFEST_VERSION, "1.0"))
|
||||
.sourceDirectories(List.of(buildJavadocDirectory()))
|
||||
.destinationDirectory(buildDistDirectory())
|
||||
.destinationFileName(javadocJarFileName()));
|
||||
|
|
|
|||
|
|
@ -164,14 +164,44 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
protected void executeCreateProjectStructure() {
|
||||
project_.createProjectStructure();
|
||||
|
||||
bldPackageDirectory_.mkdirs();
|
||||
mainPackageDirectory_.mkdirs();
|
||||
testPackageDirectory_.mkdirs();
|
||||
executeCreateDirectory(bldPackageDirectory_);
|
||||
executeCreateDirectory(mainPackageDirectory_);
|
||||
executeCreateDirectory(testPackageDirectory_);
|
||||
|
||||
ideaDirectory_.mkdirs();
|
||||
ideaLibrariesDirectory_.mkdirs();
|
||||
ideaRunConfigurationsDirectory_.mkdirs();
|
||||
vscodeDirectory_.mkdirs();
|
||||
executeCreateDirectory(ideaDirectory_);
|
||||
executeCreateDirectory(ideaLibrariesDirectory_);
|
||||
executeCreateDirectory(ideaRunConfigurationsDirectory_);
|
||||
executeCreateDirectory(vscodeDirectory_);
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, creates a directory and all its
|
||||
* parents, outputting the location when the operation is {@link #verbose()}.
|
||||
*
|
||||
* @param directory the directory to create
|
||||
* @since 2.3.1
|
||||
*/
|
||||
protected void executeCreateDirectory(File directory) {
|
||||
if (verbose()) {
|
||||
System.out.println("Creating directory '" + directory.getAbsolutePath() + "'");
|
||||
}
|
||||
directory.mkdirs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Part of the {@link #execute} operation, writes the content of a project
|
||||
* file, outputting the location when the operation is {@link #verbose()}.
|
||||
*
|
||||
* @param content the content to write
|
||||
* @param file the file to write the content into
|
||||
* @since 2.3.1
|
||||
*/
|
||||
protected void executeWriteProjectFile(String content, File file)
|
||||
throws FileUtilsErrorException {
|
||||
if (verbose()) {
|
||||
System.out.println("Creating file '" + file.getAbsolutePath() + "'");
|
||||
}
|
||||
FileUtils.writeString(content, file);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -183,7 +213,7 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
protected void executePopulateProjectStructure()
|
||||
throws IOException {
|
||||
// project gitignore
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.TXT.get(templateBase_ + "project_gitignore").getContent(),
|
||||
new File(project_.workDirectory(), ".gitignore"));
|
||||
|
||||
|
|
@ -192,7 +222,7 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
site_template.setValue("package", project_.pkg());
|
||||
site_template.setValue("projectMain", projectMainName_);
|
||||
var project_main_file = new File(mainPackageDirectory_, projectMainName_ + ".java");
|
||||
FileUtils.writeString(site_template.getContent(), project_main_file);
|
||||
executeWriteProjectFile(site_template.getContent(), project_main_file);
|
||||
|
||||
// project test
|
||||
var test_template = TemplateFactory.TXT.get(templateBase_ + "project_test");
|
||||
|
|
@ -203,7 +233,7 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
test_template.setValue("project", project_.name());
|
||||
}
|
||||
var project_test_file = new File(testPackageDirectory_, projectTestName_ + ".java");
|
||||
FileUtils.writeString(test_template.getContent(), project_test_file);
|
||||
executeWriteProjectFile(test_template.getContent(), project_test_file);
|
||||
|
||||
// project build
|
||||
var build_template = TemplateFactory.TXT.get(templateBase_ + "project_build");
|
||||
|
|
@ -247,23 +277,26 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
build_template.appendBlock("scopes", "scope");
|
||||
}
|
||||
var project_build_file = new File(bldPackageDirectory_, projectBuildName_ + ".java");
|
||||
FileUtils.writeString(build_template.getContent(), project_build_file);
|
||||
executeWriteProjectFile(build_template.getContent(), project_build_file);
|
||||
|
||||
// build shell scripts
|
||||
var build_sh_template = TemplateFactory.TXT.get("bld.bld");
|
||||
build_sh_template.setValue("projectBuild", projectBuildName_);
|
||||
build_sh_template.setValue("package", project_.pkg());
|
||||
var build_sh_file = new File(project_.workDirectory(), "bld");
|
||||
FileUtils.writeString(build_sh_template.getContent(), build_sh_file);
|
||||
executeWriteProjectFile(build_sh_template.getContent(), build_sh_file);
|
||||
build_sh_file.setExecutable(true);
|
||||
|
||||
var build_bat_template = TemplateFactory.TXT.get("bld.bld_bat");
|
||||
build_bat_template.setValue("projectBuild", projectBuildName_);
|
||||
build_bat_template.setValue("package", project_.pkg());
|
||||
var build_bat_file = new File(project_.workDirectory(), "bld.bat");
|
||||
FileUtils.writeString(build_bat_template.getContent(), build_bat_file);
|
||||
executeWriteProjectFile(build_bat_template.getContent(), build_bat_file);
|
||||
|
||||
// create the wrapper files
|
||||
if (verbose()) {
|
||||
System.out.println("Creating wrapper files in '" + project_.libBldDirectory().getAbsolutePath() + "'");
|
||||
}
|
||||
new Wrapper().createWrapperFiles(project_.libBldDirectory(), BldVersion.getVersion());
|
||||
}
|
||||
|
||||
|
|
@ -275,31 +308,31 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
protected void executePopulateIdeaProject()
|
||||
throws FileUtilsErrorException {
|
||||
// IDEA project files
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.app_iml").getContent(),
|
||||
new File(ideaDirectory_, "app.iml"));
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.bld_iml").getContent(),
|
||||
new File(ideaDirectory_, "bld.iml"));
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.misc").getContent(),
|
||||
new File(ideaDirectory_, "misc.xml"));
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.modules").getContent(),
|
||||
new File(ideaDirectory_, "modules.xml"));
|
||||
|
||||
var bld_xml_template = TemplateFactory.XML.get(templateBase_ + "idea.libraries.bld");
|
||||
bld_xml_template.setValue("version", BldVersion.getVersion());
|
||||
var bld_xml_file = new File(ideaLibrariesDirectory_, "bld.xml");
|
||||
FileUtils.writeString(bld_xml_template.getContent(), bld_xml_file);
|
||||
executeWriteProjectFile(bld_xml_template.getContent(), bld_xml_file);
|
||||
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.libraries.compile").getContent(),
|
||||
new File(ideaLibrariesDirectory_, "compile.xml"));
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.libraries.runtime").getContent(),
|
||||
new File(ideaLibrariesDirectory_, "runtime.xml"));
|
||||
FileUtils.writeString(
|
||||
executeWriteProjectFile(
|
||||
TemplateFactory.XML.get(templateBase_ + "idea.libraries.test").getContent(),
|
||||
new File(ideaLibrariesDirectory_, "test.xml"));
|
||||
|
||||
|
|
@ -309,7 +342,7 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
run_site_template.setValue("package", project_.pkg());
|
||||
run_site_template.setValue("projectMain", projectMainName_);
|
||||
var run_site_file = new File(ideaRunConfigurationsDirectory_, "Run Main.xml");
|
||||
FileUtils.writeString(run_site_template.getContent(), run_site_file);
|
||||
executeWriteProjectFile(run_site_template.getContent(), run_site_file);
|
||||
}
|
||||
|
||||
// IDEA run tests
|
||||
|
|
@ -319,7 +352,7 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
run_tests_template.setValue("projectTest", projectTestName_);
|
||||
}
|
||||
var run_tests_file = new File(ideaRunConfigurationsDirectory_, "Run Tests.xml");
|
||||
FileUtils.writeString(run_tests_template.getContent(), run_tests_file);
|
||||
executeWriteProjectFile(run_tests_template.getContent(), run_tests_file);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -347,14 +380,14 @@ public abstract class AbstractCreateOperation<T extends AbstractCreateOperation<
|
|||
launch_template.setValue("projectTest", projectTestName_);
|
||||
}
|
||||
var launch_file = new File(vscodeDirectory_, "launch.json");
|
||||
FileUtils.writeString(launch_template.getContent(), launch_file);
|
||||
executeWriteProjectFile(launch_template.getContent(), launch_file);
|
||||
|
||||
var settings_template = TemplateFactory.JSON.get(templateBase_ + "vscode.settings");
|
||||
if (settings_template.hasValueId("version")) {
|
||||
settings_template.setValue("version", BldVersion.getVersion());
|
||||
}
|
||||
var settings_file = new File(vscodeDirectory_, "settings.json");
|
||||
FileUtils.writeString(settings_template.getContent(), settings_file);
|
||||
executeWriteProjectFile(settings_template.getContent(), settings_file);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ package rife.bld.operations;
|
|||
*/
|
||||
public abstract class AbstractOperation<T extends AbstractOperation<T>> {
|
||||
private boolean silent_ = false;
|
||||
private boolean verbose_ = false;
|
||||
private boolean executed_ = false;
|
||||
|
||||
/**
|
||||
|
|
@ -40,6 +41,39 @@ public abstract class AbstractOperation<T extends AbstractOperation<T>> {
|
|||
return silent_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changes whether the operation should output detailed information about
|
||||
* what it's doing.
|
||||
* <p>
|
||||
* Defaults to not verbose.
|
||||
* <p>
|
||||
* Verbosity is independent from silence: the {@code silent} setting
|
||||
* suppresses an operation's regular output, while the {@code verbose}
|
||||
* setting adds detailed output about the individual steps an operation
|
||||
* performs.
|
||||
*
|
||||
* @param verbose {@code true} if the operation should be verbose;
|
||||
* {@code false} otherwise
|
||||
* @return this operation instance
|
||||
* @since 2.3.1
|
||||
*/
|
||||
public T verbose(boolean verbose) {
|
||||
verbose_ = verbose;
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates whether the operation should output detailed information about
|
||||
* what it's doing.
|
||||
*
|
||||
* @return {@code true} if the operation should be verbose;
|
||||
* {@code false} otherwise
|
||||
* @since 2.3.1
|
||||
*/
|
||||
public boolean verbose() {
|
||||
return verbose_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that this operation instance is executed once and only once.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -84,7 +84,13 @@ public abstract class AbstractProcessOperation<T extends AbstractProcessOperatio
|
|||
*/
|
||||
protected Process executeStartProcess()
|
||||
throws IOException {
|
||||
var builder = new ProcessBuilder(executeConstructProcessCommandList());
|
||||
var command = executeConstructProcessCommandList();
|
||||
|
||||
if (verbose()) {
|
||||
System.out.println("Executing command: " + String.join(" ", command));
|
||||
}
|
||||
|
||||
var builder = new ProcessBuilder(command);
|
||||
builder.directory(workDirectory());
|
||||
|
||||
if (!environment_.isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -130,6 +130,10 @@ public abstract class AbstractToolProviderOperation<T extends AbstractToolProvid
|
|||
var tool = ToolProvider.findFirst(toolName_).orElseThrow(() ->
|
||||
new IllegalStateException("No " + toolName_ + " tool found."));
|
||||
|
||||
if (verbose()) {
|
||||
System.out.println("Executing command: " + tool.name() + ' ' + String.join(" ", toolArgs_));
|
||||
}
|
||||
|
||||
var status = tool.run(System.out, System.err, toolArgs_.toArray(new String[0]));
|
||||
if (status != 0) {
|
||||
System.out.println(tool.name() + ' ' + String.join(" ", toolArgs_));
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ public class CleanOperation extends AbstractOperation<CleanOperation> {
|
|||
*/
|
||||
protected void executeCleanDirectory(File directory) {
|
||||
try {
|
||||
if (verbose() && directory.exists()) {
|
||||
System.out.println("Deleting directory '" + directory.getAbsolutePath() + "'");
|
||||
}
|
||||
FileUtils.deleteDirectory(directory);
|
||||
} catch (FileUtilsErrorException e) {
|
||||
// no-op
|
||||
|
|
@ -56,8 +59,9 @@ public class CleanOperation extends AbstractOperation<CleanOperation> {
|
|||
* @since 1.5
|
||||
*/
|
||||
public CleanOperation fromProject(BaseProject project) {
|
||||
return directories(project.buildDirectory()
|
||||
.listFiles(f -> !f.equals(project.buildBldDirectory())));
|
||||
return verbose(project.verbose())
|
||||
.directories(project.buildDirectory()
|
||||
.listFiles(f -> !f.equals(project.buildBldDirectory())));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -85,7 +85,14 @@ public class CompileOperation extends AbstractOperation<CompileOperation> {
|
|||
throws IOException {
|
||||
var sources = new ArrayList<>(mainSourceFiles());
|
||||
for (var directory : mainSourceDirectories()) {
|
||||
sources.addAll(FileUtils.getJavaFileList(directory));
|
||||
var found = FileUtils.getJavaFileList(directory);
|
||||
if (verbose()) {
|
||||
var dir_abs = directory.getAbsoluteFile();
|
||||
for (var source : found) {
|
||||
System.out.println("Found main source file '" + dir_abs.toPath().relativize(source.toPath()) + "' in '" + dir_abs + "'");
|
||||
}
|
||||
}
|
||||
sources.addAll(found);
|
||||
}
|
||||
|
||||
if (sources.isEmpty()) {
|
||||
|
|
@ -110,7 +117,14 @@ public class CompileOperation extends AbstractOperation<CompileOperation> {
|
|||
throws IOException {
|
||||
var sources = new ArrayList<>(testSourceFiles());
|
||||
for (var directory : testSourceDirectories()) {
|
||||
sources.addAll(FileUtils.getJavaFileList(directory));
|
||||
var found = FileUtils.getJavaFileList(directory);
|
||||
if (verbose()) {
|
||||
var dir_abs = directory.getAbsoluteFile();
|
||||
for (var source : found) {
|
||||
System.out.println("Found test source file '" + dir_abs.toPath().relativize(source.toPath()) + "' in '" + dir_abs + "'");
|
||||
}
|
||||
}
|
||||
sources.addAll(found);
|
||||
}
|
||||
|
||||
if (sources.isEmpty()) {
|
||||
|
|
@ -141,6 +155,12 @@ public class CompileOperation extends AbstractOperation<CompileOperation> {
|
|||
return;
|
||||
}
|
||||
|
||||
if (verbose()) {
|
||||
for (var source : sources) {
|
||||
System.out.println("Compiling source '" + source.getAbsolutePath() + "' into '" + destination.getAbsolutePath() + "'");
|
||||
}
|
||||
}
|
||||
|
||||
var compiler = ToolProvider.getSystemJavaCompiler();
|
||||
try (var file_manager = compiler.getStandardFileManager(null, null, null)) {
|
||||
var compilation_units = file_manager.getJavaFileObjectsFromFiles(sources);
|
||||
|
|
@ -221,7 +241,8 @@ public class CompileOperation extends AbstractOperation<CompileOperation> {
|
|||
* @since 1.5
|
||||
*/
|
||||
public CompileOperation fromProject(BaseProject project) {
|
||||
var operation = buildMainDirectory(project.buildMainDirectory())
|
||||
var operation = verbose(project.verbose())
|
||||
.buildMainDirectory(project.buildMainDirectory())
|
||||
.buildTestDirectory(project.buildTestDirectory())
|
||||
.compileMainClasspath(project.compileMainClasspath())
|
||||
.compileTestClasspath(project.compileTestClasspath())
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ public class HelpOperation {
|
|||
-?, -h, --help Shows the help
|
||||
-D<name>=<value> Sets a JVM system property
|
||||
-s, --stacktrace Prints out the stacktrace for exceptions
|
||||
-v, --verbose Prints out detailed information about the operations
|
||||
""");
|
||||
}
|
||||
}
|
||||
|
|
@ -108,6 +108,10 @@ public class JarOperation extends AbstractOperation<JarOperation> {
|
|||
*/
|
||||
protected void executeAddFileToJar(JarOutputStream jar, NamedFile file)
|
||||
throws IOException {
|
||||
if (verbose()) {
|
||||
System.out.println("Adding '" + file.file().getAbsolutePath() + "' to jar as '" + file.name().replace('\\', '/') + "'");
|
||||
}
|
||||
|
||||
var entry = new JarEntry(file.name().replace('\\', '/'));
|
||||
entry.setTime(file.file().lastModified());
|
||||
jar.putNextEntry(entry);
|
||||
|
|
@ -128,7 +132,8 @@ public class JarOperation extends AbstractOperation<JarOperation> {
|
|||
* @since 1.5
|
||||
*/
|
||||
public JarOperation fromProject(BaseProject project) {
|
||||
return manifestAttributes(Map.of(Attributes.Name.MANIFEST_VERSION, "1.0"))
|
||||
return verbose(project.verbose())
|
||||
.manifestAttributes(Map.of(Attributes.Name.MANIFEST_VERSION, "1.0"))
|
||||
.sourceDirectories(project.buildMainDirectory(), project.srcMainResourcesDirectory())
|
||||
.destinationDirectory(project.buildDistDirectory())
|
||||
.destinationFileName(project.jarFileName())
|
||||
|
|
|
|||
|
|
@ -102,6 +102,12 @@ public class JavadocOperation extends AbstractOperation<JavadocOperation> {
|
|||
}
|
||||
}
|
||||
|
||||
if (verbose()) {
|
||||
for (var source : filtered_sources) {
|
||||
System.out.println("Documenting source '" + source.getAbsolutePath() + "' into '" + destination.getAbsolutePath() + "'");
|
||||
}
|
||||
}
|
||||
|
||||
var documentation = ToolProvider.getSystemDocumentationTool();
|
||||
try (var file_manager = documentation.getStandardFileManager(null, null, null)) {
|
||||
var compilation_units = file_manager.getJavaFileObjectsFromFiles(filtered_sources);
|
||||
|
|
@ -152,7 +158,8 @@ public class JavadocOperation extends AbstractOperation<JavadocOperation> {
|
|||
* @since 1.5.10
|
||||
*/
|
||||
public JavadocOperation fromProject(BaseProject project) {
|
||||
var operation = buildDirectory(project.buildJavadocDirectory())
|
||||
var operation = verbose(project.verbose())
|
||||
.buildDirectory(project.buildJavadocDirectory())
|
||||
.classpath(project.compileMainClasspath())
|
||||
.classpath(project.buildMainDirectory().getAbsolutePath())
|
||||
.modulePath(project.compileMainModulePath())
|
||||
|
|
|
|||
|
|
@ -65,7 +65,8 @@ public class RunOperation extends AbstractProcessOperation<RunOperation> {
|
|||
* @since 1.5
|
||||
*/
|
||||
public RunOperation fromProject(BaseProject project) {
|
||||
var operation = workDirectory(project.workDirectory())
|
||||
var operation = verbose(project.verbose())
|
||||
.workDirectory(project.workDirectory())
|
||||
.javaTool(project.javaTool())
|
||||
.classpath(project.runClasspath())
|
||||
.modulePath(project.runModulePath())
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ public class TestOperation<T extends TestOperation<T, O>, O extends List<String>
|
|||
* @since 1.5
|
||||
*/
|
||||
public T fromProject(BaseProject project) {
|
||||
var operation = workDirectory(project.workDirectory())
|
||||
var operation = verbose(project.verbose())
|
||||
.workDirectory(project.workDirectory())
|
||||
.javaTool(project.javaTool())
|
||||
.classpath(project.testClasspath())
|
||||
.modulePath(project.testModulePath());
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ public class UberJarOperation extends AbstractOperation<UberJarOperation> {
|
|||
protected void executeCollectSourceJarContents(File stagingDirectory)
|
||||
throws FileUtilsErrorException {
|
||||
for (var jar : jarSourceFiles()) {
|
||||
if (verbose()) {
|
||||
System.out.println("Unpacking jar '" + jar.getAbsolutePath() + "'");
|
||||
}
|
||||
FileUtils.unzipFile(jar, stagingDirectory);
|
||||
}
|
||||
}
|
||||
|
|
@ -73,6 +76,9 @@ public class UberJarOperation extends AbstractOperation<UberJarOperation> {
|
|||
throws FileUtilsErrorException {
|
||||
for (var named_file : sourceDirectories()) {
|
||||
if (named_file.file().exists()) {
|
||||
if (verbose()) {
|
||||
System.out.println("Collecting resources from '" + named_file.file().getAbsolutePath() + "'");
|
||||
}
|
||||
var destination_file = new File(stagingDirectory, named_file.name());
|
||||
destination_file.mkdirs();
|
||||
FileUtils.copyDirectory(named_file.file(), destination_file);
|
||||
|
|
@ -91,6 +97,7 @@ public class UberJarOperation extends AbstractOperation<UberJarOperation> {
|
|||
existing_manifest.delete();
|
||||
|
||||
new JarOperation()
|
||||
.verbose(verbose())
|
||||
.manifestAttributes(Map.of(
|
||||
Attributes.Name.MANIFEST_VERSION, "1.0",
|
||||
Attributes.Name.MAIN_CLASS, mainClass()))
|
||||
|
|
@ -115,7 +122,8 @@ public class UberJarOperation extends AbstractOperation<UberJarOperation> {
|
|||
jars.addAll(project.runtimeClasspathJars());
|
||||
jars.add(new File(project.buildDistDirectory(), project.jarFileName()));
|
||||
|
||||
return jarSourceFiles(jars)
|
||||
return verbose(project.verbose())
|
||||
.jarSourceFiles(jars)
|
||||
.destinationDirectory(project.buildDistDirectory())
|
||||
.destinationFileName(project.uberJarFileName())
|
||||
.mainClass(project.uberJarMainClass());
|
||||
|
|
|
|||
|
|
@ -23,9 +23,25 @@ public class UpgradeOperation extends AbstractOperation<UpgradeOperation> {
|
|||
*/
|
||||
public void execute()
|
||||
throws IOException {
|
||||
new Wrapper().createWrapperFiles(Path.of("lib", "bld").toFile(), BldVersion.getVersion());
|
||||
new Wrapper().upgradeIdeaBldLibrary(new File(".idea"), BldVersion.getVersion());
|
||||
new Wrapper().upgradeVscodeSettings(new File(".vscode"), BldVersion.getVersion());
|
||||
var bld_dir = Path.of("lib", "bld").toFile();
|
||||
var idea_dir = new File(".idea");
|
||||
var vscode_dir = new File(".vscode");
|
||||
|
||||
if (verbose()) {
|
||||
System.out.println("Creating wrapper files in '" + bld_dir.getAbsolutePath() + "'");
|
||||
}
|
||||
new Wrapper().createWrapperFiles(bld_dir, BldVersion.getVersion());
|
||||
|
||||
if (verbose()) {
|
||||
System.out.println("Upgrading IDEA bld library in '" + idea_dir.getAbsolutePath() + "'");
|
||||
}
|
||||
new Wrapper().upgradeIdeaBldLibrary(idea_dir, BldVersion.getVersion());
|
||||
|
||||
if (verbose()) {
|
||||
System.out.println("Upgrading VSCode settings in '" + vscode_dir.getAbsolutePath() + "'");
|
||||
}
|
||||
new Wrapper().upgradeVscodeSettings(vscode_dir, BldVersion.getVersion());
|
||||
|
||||
if (!silent()) {
|
||||
System.out.println("The wrapper was successfully upgraded to " + BldVersion.getVersion() + ".");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,6 +77,9 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
protected void executeCopyWebappDirectory(File stagingDirectory)
|
||||
throws FileUtilsErrorException {
|
||||
if (webappDirectory() != null) {
|
||||
if (verbose()) {
|
||||
System.out.println("Copying webapp directory '" + webappDirectory().getAbsolutePath() + "'");
|
||||
}
|
||||
FileUtils.copyDirectory(webappDirectory(), stagingDirectory);
|
||||
}
|
||||
}
|
||||
|
|
@ -92,6 +95,9 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
if (!libSourceDirectories().isEmpty()) {
|
||||
web_inf_lib_dir.mkdirs();
|
||||
for (var dir : libSourceDirectories()) {
|
||||
if (verbose()) {
|
||||
System.out.println("Copying lib directory '" + dir.getAbsolutePath() + "' into 'WEB-INF/lib'");
|
||||
}
|
||||
FileUtils.copyDirectory(dir, web_inf_lib_dir);
|
||||
}
|
||||
}
|
||||
|
|
@ -99,6 +105,9 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
if (!jarSourceFiles().isEmpty()) {
|
||||
web_inf_lib_dir.mkdirs();
|
||||
for (var file : jarSourceFiles()) {
|
||||
if (verbose()) {
|
||||
System.out.println("Copying jar '" + file.file().getAbsolutePath() + "' into 'WEB-INF/lib' as '" + file.name() + "'");
|
||||
}
|
||||
FileUtils.copy(file.file(), new File(web_inf_lib_dir, file.name()));
|
||||
}
|
||||
}
|
||||
|
|
@ -115,6 +124,9 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
if (!classesSourceDirectories().isEmpty()) {
|
||||
web_inf_classes_dir.mkdirs();
|
||||
for (var dir : classesSourceDirectories()) {
|
||||
if (verbose()) {
|
||||
System.out.println("Copying classes directory '" + dir.getAbsolutePath() + "' into 'WEB-INF/classes'");
|
||||
}
|
||||
FileUtils.copyDirectory(dir, web_inf_classes_dir);
|
||||
}
|
||||
}
|
||||
|
|
@ -128,6 +140,9 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
protected void executeCopyWebXmlFile(File stagingWebInfDirectory)
|
||||
throws FileUtilsErrorException {
|
||||
if (webXmlFile() != null) {
|
||||
if (verbose()) {
|
||||
System.out.println("Copying web.xml file '" + webXmlFile().getAbsolutePath() + "' into 'WEB-INF'");
|
||||
}
|
||||
FileUtils.copy(webXmlFile(), new File(stagingWebInfDirectory, "web.xml"));
|
||||
}
|
||||
}
|
||||
|
|
@ -140,6 +155,7 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
protected void executeCreateWarArchive(File stagingDirectory)
|
||||
throws IOException {
|
||||
new JarOperation()
|
||||
.verbose(verbose())
|
||||
.sourceDirectories(stagingDirectory)
|
||||
.destinationDirectory(destinationDirectory())
|
||||
.destinationFileName(destinationFileName())
|
||||
|
|
@ -165,7 +181,8 @@ public class WarOperation extends AbstractOperation<WarOperation> {
|
|||
jar_source_files.add(new NamedFile(jar_file.getName(), jar_file));
|
||||
}
|
||||
|
||||
return jarSourceFiles(jar_source_files)
|
||||
return verbose(project.verbose())
|
||||
.jarSourceFiles(jar_source_files)
|
||||
.webappDirectory(project.srcMainWebappDirectory())
|
||||
.destinationDirectory(project.buildDistDirectory())
|
||||
.destinationFileName(project.warFileName());
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ import org.junit.jupiter.api.Test;
|
|||
import rife.bld.WebProject;
|
||||
import rife.tools.FileUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -90,6 +92,37 @@ public class TestCleanOperation {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVerbose()
|
||||
throws Exception {
|
||||
var tmp = Files.createTempDirectory("test").toFile();
|
||||
try {
|
||||
var dir1 = new File(tmp, "dir1");
|
||||
var dir2 = new File(tmp, "dir2");
|
||||
dir1.mkdirs();
|
||||
dir2.mkdirs();
|
||||
|
||||
var orig_out = System.out;
|
||||
var captured = new ByteArrayOutputStream();
|
||||
try {
|
||||
System.setOut(new PrintStream(captured, true));
|
||||
|
||||
new CleanOperation()
|
||||
.verbose(true)
|
||||
.directories(List.of(dir1, dir2))
|
||||
.execute();
|
||||
} finally {
|
||||
System.setOut(orig_out);
|
||||
}
|
||||
|
||||
var output = captured.toString();
|
||||
assertTrue(output.contains("Deleting directory '" + dir1.getAbsolutePath() + "'"), output);
|
||||
assertTrue(output.contains("Deleting directory '" + dir2.getAbsolutePath() + "'"), output);
|
||||
} finally {
|
||||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
static class TestProject extends WebProject {
|
||||
public TestProject(File tmp) {
|
||||
workDirectory = tmp;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ import rife.tools.FileUtils;
|
|||
|
||||
import javax.tools.DiagnosticCollector;
|
||||
import javax.tools.JavaFileObject;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -208,6 +210,83 @@ public class TestCompileOperation {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVerbose()
|
||||
throws Exception {
|
||||
var tmp = Files.createTempDirectory("test").toFile();
|
||||
try {
|
||||
var main_dir = new File(tmp, "main");
|
||||
var package_dir = new File(main_dir, "tst");
|
||||
package_dir.mkdirs();
|
||||
var source_file = new File(package_dir, "Source.java");
|
||||
FileUtils.writeString("""
|
||||
package tst;
|
||||
public class Source {
|
||||
}
|
||||
""", source_file);
|
||||
|
||||
var build_main = new File(tmp, "buildMain");
|
||||
|
||||
var orig_out = System.out;
|
||||
var captured = new ByteArrayOutputStream();
|
||||
try {
|
||||
System.setOut(new PrintStream(captured, true));
|
||||
|
||||
new CompileOperation()
|
||||
.verbose(true)
|
||||
.buildMainDirectory(build_main)
|
||||
.mainSourceDirectories(List.of(main_dir))
|
||||
.execute();
|
||||
} finally {
|
||||
System.setOut(orig_out);
|
||||
}
|
||||
|
||||
var output = captured.toString();
|
||||
assertTrue(output.contains("Found main source file '" + new File("tst", "Source.java") + "' in '" + main_dir.getAbsoluteFile() + "'"), output);
|
||||
assertTrue(output.contains("Compiling source '" + source_file.getAbsolutePath() + "' into '" + build_main.getAbsolutePath() + "'"), output);
|
||||
} finally {
|
||||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNotVerbose()
|
||||
throws Exception {
|
||||
var tmp = Files.createTempDirectory("test").toFile();
|
||||
try {
|
||||
var main_dir = new File(tmp, "main");
|
||||
var package_dir = new File(main_dir, "tst");
|
||||
package_dir.mkdirs();
|
||||
var source_file = new File(package_dir, "Source.java");
|
||||
FileUtils.writeString("""
|
||||
package tst;
|
||||
public class Source {
|
||||
}
|
||||
""", source_file);
|
||||
|
||||
var build_main = new File(tmp, "buildMain");
|
||||
|
||||
var orig_out = System.out;
|
||||
var captured = new ByteArrayOutputStream();
|
||||
try {
|
||||
System.setOut(new PrintStream(captured, true));
|
||||
|
||||
new CompileOperation()
|
||||
.buildMainDirectory(build_main)
|
||||
.mainSourceDirectories(List.of(main_dir))
|
||||
.execute();
|
||||
} finally {
|
||||
System.setOut(orig_out);
|
||||
}
|
||||
|
||||
var output = captured.toString();
|
||||
assertFalse(output.contains("Found main source file"), output);
|
||||
assertFalse(output.contains("Compiling source"), output);
|
||||
} finally {
|
||||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFromProject()
|
||||
throws Exception {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@ package rife.bld.operations;
|
|||
import org.junit.jupiter.api.Test;
|
||||
import rife.tools.FileUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
|
@ -344,4 +347,35 @@ public class TestCreateBaseOperation {
|
|||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVerbose()
|
||||
throws Exception {
|
||||
var tmp = Files.createTempDirectory("test").toFile();
|
||||
try {
|
||||
var orig_out = System.out;
|
||||
var captured = new ByteArrayOutputStream();
|
||||
try {
|
||||
System.setOut(new PrintStream(captured, true));
|
||||
|
||||
new CreateBaseOperation()
|
||||
.verbose(true)
|
||||
.workDirectory(tmp)
|
||||
.packageName("org.stuff")
|
||||
.projectName("your-thing")
|
||||
.baseName("YourThing")
|
||||
.execute();
|
||||
} finally {
|
||||
System.setOut(orig_out);
|
||||
}
|
||||
|
||||
var output = captured.toString();
|
||||
var bld_file = new File(tmp, "your-thing/src/bld/java/org/stuff/YourThingBuild.java");
|
||||
var main_package_dir = new File(tmp, "your-thing/src/main/java/org/stuff");
|
||||
assertTrue(output.contains("Creating directory '" + main_package_dir.getAbsolutePath() + "'"), output);
|
||||
assertTrue(output.contains("Creating file '" + bld_file.getAbsolutePath() + "'"), output);
|
||||
} finally {
|
||||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ import org.junit.jupiter.api.Test;
|
|||
import rife.bld.NamedFile;
|
||||
import rife.tools.FileUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -177,6 +179,41 @@ public class TestJarOperation {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVerbose()
|
||||
throws Exception {
|
||||
var tmp = Files.createTempDirectory("test").toFile();
|
||||
try {
|
||||
var source_dir = new File(tmp, "source");
|
||||
var destination_dir = new File(tmp, "destination");
|
||||
var destination_name = "archive.jar";
|
||||
|
||||
source_dir.mkdirs();
|
||||
var source1 = new File(source_dir, "source1.text");
|
||||
FileUtils.writeString("source1", source1);
|
||||
|
||||
var orig_out = System.out;
|
||||
var captured = new ByteArrayOutputStream();
|
||||
try {
|
||||
System.setOut(new PrintStream(captured, true));
|
||||
|
||||
new JarOperation()
|
||||
.verbose(true)
|
||||
.sourceDirectories(List.of(source_dir))
|
||||
.destinationDirectory(destination_dir)
|
||||
.destinationFileName(destination_name)
|
||||
.execute();
|
||||
} finally {
|
||||
System.setOut(orig_out);
|
||||
}
|
||||
|
||||
var output = captured.toString();
|
||||
assertTrue(output.contains("Adding '" + source1.getAbsolutePath() + "' to jar as 'source1.text'"), output);
|
||||
} finally {
|
||||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFromProject()
|
||||
throws Exception {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ import org.junit.jupiter.api.Test;
|
|||
import rife.bld.NamedFile;
|
||||
import rife.tools.FileUtils;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.file.Files;
|
||||
import java.util.List;
|
||||
import java.util.jar.JarFile;
|
||||
|
|
@ -106,6 +108,51 @@ public class TestWarOperation {
|
|||
assertEquals(destination_fileName, operation3.destinationFileName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testVerbose()
|
||||
throws Exception {
|
||||
var tmp = Files.createTempDirectory("test").toFile();
|
||||
try {
|
||||
var webapp_dir = new File(tmp, "webapp");
|
||||
webapp_dir.mkdirs();
|
||||
FileUtils.writeString("body { }", new File(webapp_dir, "style.css"));
|
||||
|
||||
var jar_file = new File(tmp, "lib.jar");
|
||||
FileUtils.writeString("not really a jar", jar_file);
|
||||
|
||||
var web_xml_file = new File(tmp, "web.xml");
|
||||
FileUtils.writeString("<web-app/>", web_xml_file);
|
||||
|
||||
var destination_dir = new File(tmp, "destination");
|
||||
|
||||
var orig_out = System.out;
|
||||
var captured = new ByteArrayOutputStream();
|
||||
try {
|
||||
System.setOut(new PrintStream(captured, true));
|
||||
|
||||
new WarOperation()
|
||||
.verbose(true)
|
||||
.webappDirectory(webapp_dir)
|
||||
.jarSourceFiles(new NamedFile("lib.jar", jar_file))
|
||||
.webXmlFile(web_xml_file)
|
||||
.destinationDirectory(destination_dir)
|
||||
.destinationFileName("archive.war")
|
||||
.execute();
|
||||
} finally {
|
||||
System.setOut(orig_out);
|
||||
}
|
||||
|
||||
var output = captured.toString();
|
||||
assertTrue(output.contains("Copying webapp directory '" + webapp_dir.getAbsolutePath() + "'"), output);
|
||||
assertTrue(output.contains("Copying jar '" + jar_file.getAbsolutePath() + "' into 'WEB-INF/lib' as 'lib.jar'"), output);
|
||||
assertTrue(output.contains("Copying web.xml file '" + web_xml_file.getAbsolutePath() + "' into 'WEB-INF'"), output);
|
||||
// the internal jar operation also runs verbosely
|
||||
assertTrue(output.contains("' to jar as '"), output);
|
||||
} finally {
|
||||
FileUtils.deleteDirectory(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFromProject()
|
||||
throws Exception {
|
||||
|
|
|
|||
Loading…
Reference in a new issue