This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 825b4356cb3 CAMEL-18173: camel-jbang - Add option to turn off download
over the internet
825b4356cb3 is described below
commit 825b4356cb3b16f5542fb05d652132281a872e92
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jun 8 12:32:03 2022 +0200
CAMEL-18173: camel-jbang - Add option to turn off download over the internet
---
.../apache/camel/dsl/jbang/core/commands/Run.java | 11 ++++
.../org/apache/camel/main/DownloaderHelper.java | 13 +++-
.../java/org/apache/camel/main/KameletMain.java | 74 ++++++++++++++--------
.../src/main/resources/localGrapeConfig.xml | 37 +++++++++++
4 files changed, 105 insertions(+), 30 deletions(-)
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 3fb0f8f7e18..cc659290454 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -105,6 +105,12 @@ class Run extends CamelCommand {
@Option(names = {"--repos"}, description = "Additional maven repositories
for download on-demand (Use commas to separate multiple repositories).")
String repos;
+ @Option(names = {"--download"}, defaultValue = "true", description =
"Whether to allow automatic downloaded JAR dependencies, over the internet,
that Camel requires.")
+ boolean download = true;
+
+ @Option(names = {"--downloadVerbose"}, description = "Whether to include
verbose details when downloading.")
+ boolean downloadVerbose;
+
@Option(names = { "--name" }, defaultValue = "CamelJBang", description =
"The name of the Camel application")
String name;
@@ -290,6 +296,9 @@ class Run extends CamelCommand {
propertiesFiles = propertiesFiles + ",file:" +
profilePropertiesFile.getName();
}
repos = profileProperties.getProperty("camel.jbang.repos", repos);
+ download =
"true".equals(profileProperties.getProperty("camel.jbang.download", download ?
"true" : "false"));
+ downloadVerbose = "true"
+
.equals(profileProperties.getProperty("camel.jbang.downloadVerbose",
downloadVerbose ? "true" : "false"));
}
// if no specific file to run then try to auto-detect
@@ -313,6 +322,8 @@ class Run extends CamelCommand {
final Set<String> downloaded = new HashSet<>();
main.setRepos(repos);
+ main.setDownload(download);
+ main.setDownloadVerbose(downloadVerbose);
main.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadDependency(String groupId, String
artifactId, String version) {
diff --git
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
index b2d87bd6199..372cb0954d7 100644
---
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
+++
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
@@ -71,6 +71,7 @@ public final class DownloaderHelper {
map.put("module", artifactId);
map.put("version", version);
map.put("classifier", "");
+ // map.put("excludes",
Collections.singletonList(Map.of("group", "com.atlassian.sal", "module",
"sal-api")));
String gav = groupId + ":" + artifactId + ":" + version;
DOWNLOAD_THREAD_POOL.download(LOG, () -> {
@@ -111,11 +112,14 @@ public final class DownloaderHelper {
return false;
}
- public static void prepareDownloader(CamelContext camelContext, String
repos) throws Exception {
- InputStream is =
DownloaderHelper.class.getResourceAsStream("/camelGrapeConfig.xml");
+ public static void prepareDownloader(CamelContext camelContext, String
repos, boolean download, boolean verbose)
+ throws Exception {
+ InputStream is = download
+ ?
DownloaderHelper.class.getResourceAsStream("/camelGrapeConfig.xml")
+ :
DownloaderHelper.class.getResourceAsStream("/localGrapeConfig.xml");
if (is != null) {
String xml = IOHelper.loadText(is);
- if (repos != null) {
+ if (download && repos != null) {
StringBuilder sb = new StringBuilder();
sb.append(" <!-- custom repositories -->");
int i = 0;
@@ -136,6 +140,9 @@ public final class DownloaderHelper {
// Grape should use our custom configuration file
System.setProperty("grape.config", out.getAbsolutePath());
+ if (verbose) {
+ System.setProperty("groovy.grape.report.downloads", "true");
+ }
IOHelper.close(is);
}
diff --git
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 0da80cffeba..039c9bc605c 100644
---
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -39,6 +39,7 @@ public class KameletMain extends MainCommandLineSupport {
protected final MainRegistry registry = new MainRegistry();
private boolean download = true;
+ private boolean downloadVerbose;
private String repos;
private boolean stub;
private DownloadListener downloadListener;
@@ -118,6 +119,17 @@ public class KameletMain extends MainCommandLineSupport {
this.download = download;
}
+ public boolean isDownloadVerbose() {
+ return downloadVerbose;
+ }
+
+ /**
+ * Whether to include verbose details when downloading
+ */
+ public void setDownloadVerbose(boolean downloadVerbose) {
+ this.downloadVerbose = downloadVerbose;
+ }
+
public String getRepos() {
return repos;
}
@@ -179,6 +191,16 @@ public class KameletMain extends MainCommandLineSupport {
}
}
});
+ addOption(new ParameterOption(
+ "downloadVerbose", "downloadVerbose", "Whether to include
verbose details when downloading",
+ "downloadVerbose") {
+ @Override
+ protected void doProcess(String arg, String parameter,
LinkedList<String> remainingArgs) {
+ if (arg.equals("-downloadVerbose")) {
+ setDownloadVerbose("true".equalsIgnoreCase(parameter));
+ }
+ }
+ });
addOption(new ParameterOption(
"repos", "repositories", "Additional maven repositories for
download on-demand.",
"repos") {
@@ -297,34 +319,32 @@ public class KameletMain extends MainCommandLineSupport {
answer.setStartupStepRecorder(recorder);
}
- if (download) {
- // use resolvers that can auto downloaded
- try {
- // prepare grape config with custom repositories
- DownloaderHelper.prepareDownloader(camelContext, repos);
-
- // dependencies from CLI
- Object dependencies =
getInitialProperties().get("camel.jbang.dependencies");
- if (dependencies != null) {
- answer.addService(new
CommandLineDependencyDownloader(dependencies.toString()));
- }
-
- KnownDependenciesResolver known = new
KnownDependenciesResolver(answer);
- known.loadKnownDependencies();
- DependencyDownloaderPropertyBindingListener listener
- = new
DependencyDownloaderPropertyBindingListener(answer, known);
-
answer.getRegistry().bind(DependencyDownloaderPropertyBindingListener.class.getName(),
listener);
-
answer.getRegistry().bind(DependencyDownloaderStrategy.class.getName(),
- new DependencyDownloaderStrategy(answer));
- answer.setClassResolver(new
DependencyDownloaderClassResolver(answer, known));
- answer.setComponentResolver(new
DependencyDownloaderComponentResolver(answer, stub));
- answer.setDataFormatResolver(new
DependencyDownloaderDataFormatResolver(answer));
- answer.setLanguageResolver(new
DependencyDownloaderLanguageResolver(answer));
- answer.setResourceLoader(new
DependencyDownloaderResourceLoader(answer));
- answer.addService(new DependencyDownloaderKamelet());
- } catch (Exception e) {
- throw RuntimeCamelException.wrapRuntimeException(e);
+ try {
+ // prepare grape config with custom repositories
+ // use resolvers that can auto downloaded (either local or over
the internet)
+ DownloaderHelper.prepareDownloader(camelContext, repos, download,
downloadVerbose);
+
+ // dependencies from CLI
+ Object dependencies =
getInitialProperties().get("camel.jbang.dependencies");
+ if (dependencies != null) {
+ answer.addService(new
CommandLineDependencyDownloader(dependencies.toString()));
}
+
+ KnownDependenciesResolver known = new
KnownDependenciesResolver(answer);
+ known.loadKnownDependencies();
+ DependencyDownloaderPropertyBindingListener listener
+ = new DependencyDownloaderPropertyBindingListener(answer,
known);
+
answer.getRegistry().bind(DependencyDownloaderPropertyBindingListener.class.getName(),
listener);
+
answer.getRegistry().bind(DependencyDownloaderStrategy.class.getName(),
+ new DependencyDownloaderStrategy(answer));
+ answer.setClassResolver(new
DependencyDownloaderClassResolver(answer, known));
+ answer.setComponentResolver(new
DependencyDownloaderComponentResolver(answer, stub));
+ answer.setDataFormatResolver(new
DependencyDownloaderDataFormatResolver(answer));
+ answer.setLanguageResolver(new
DependencyDownloaderLanguageResolver(answer));
+ answer.setResourceLoader(new
DependencyDownloaderResourceLoader(answer));
+ answer.addService(new DependencyDownloaderKamelet());
+ } catch (Exception e) {
+ throw RuntimeCamelException.wrapRuntimeException(e);
}
return answer;
diff --git a/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml
b/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml
new file mode 100644
index 00000000000..f92bb0ef6a4
--- /dev/null
+++ b/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml
@@ -0,0 +1,37 @@
+<!--
+
+ 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.
+
+-->
+<ivysettings>
+ <!-- disable download of source and javadoc to be faster -->
+ <property name="ivy.maven.lookup.sources" value="false"/>
+ <property name="ivy.maven.lookup.javadoc" value="false"/>
+ <settings defaultResolver="downloadGrapes"/>
+ <resolvers>
+ <chain name="downloadGrapes" returnFirst="true">
+ <!-- grapes -->
+ <filesystem name="cachedGrapes">
+ <ivy
pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/>
+ <artifact
pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"/>
+ </filesystem>
+ <!-- local m2 -->
+ <ibiblio name="localm2" root="${user.home.url}/.m2/repository/"
checkmodified="true" changingPattern=".*" changingMatcher="regexp"
m2compatible="true"/>
+ </chain>
+ </resolvers>
+</ivysettings>