You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/11/09 11:23:21 UTC
(camel) branch jb-agent created (now 8fa9ce25667)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a change to branch jb-agent
in repository https://gitbox.apache.org/repos/asf/camel.git
at 8fa9ce25667 CAMEL-20033: camel-jbang - Write to settings properties file using JDK Properties code that escapes key and value so it works on Windows.
This branch includes the following new commits:
new 9285aa0c0d1 CAMEL-20082: camel-jbang - Export to support javaagents
new 8fa9ce25667 CAMEL-20033: camel-jbang - Write to settings properties file using JDK Properties code that escapes key and value so it works on Windows.
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(camel) 01/02: CAMEL-20082: camel-jbang - Export to support javaagents
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch jb-agent
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9285aa0c0d1bf8eb0ebd95fff1de55ad5399f83d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Nov 9 12:19:08 2023 +0100
CAMEL-20082: camel-jbang - Export to support javaagents
---
.../dsl/jbang/core/commands/ExportBaseCommand.java | 51 ++++++++++++++++++++++
.../dsl/jbang/core/commands/ExportCamelMain.java | 3 ++
.../org/apache/camel/tooling/maven/MavenGav.java | 4 ++
.../apache/camel/tooling/maven/MavenGavTest.java | 10 +++++
4 files changed, 68 insertions(+)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index dbf055cc107..fcadf188cb0 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.Arrays;
@@ -48,7 +49,11 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
import org.apache.camel.dsl.jbang.core.common.VersionHelper;
+import org.apache.camel.tooling.maven.MavenArtifact;
+import org.apache.camel.tooling.maven.MavenDownloader;
+import org.apache.camel.tooling.maven.MavenDownloaderImpl;
import org.apache.camel.tooling.maven.MavenGav;
+import org.apache.camel.tooling.maven.MavenResolutionException;
import org.apache.camel.util.CamelCaseOrderedProperties;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.IOHelper;
@@ -71,6 +76,10 @@ abstract class ExportBaseCommand extends CamelCommand {
private static final Pattern PACKAGE_PATTERN = Pattern.compile(
"^\\s*package\\s+([a-zA-Z][.\\w]*)\\s*;.*$", Pattern.MULTILINE);
+ private static final Set<String> EXCLUDED_GROUP_IDS = Set.of("org.fusesource.jansi", "org.apache.logging.log4j");
+
+ private MavenDownloader downloader;
+
@CommandLine.Parameters(description = "The Camel file(s) to export. If no files is specified then what was last run will be exported.",
arity = "0..9", paramLabel = "<files>", parameterConsumer = FilesConsumer.class)
protected Path[] filePaths; // Defined only for file path completion; the field never used
@@ -810,6 +819,48 @@ abstract class ExportBaseCommand extends CamelCommand {
}
}
+ protected void copyAgentDependencies(Set<String> deps) throws Exception {
+ for (String d : deps) {
+ if (d.startsWith("agent:")) {
+ File libDir = new File(BUILD_DIR, "agent");
+ libDir.mkdirs();
+ String n = d.substring(6);
+ MavenGav gav = MavenGav.parseGav(n);
+ copyAgentLibDependencies(gav);
+ }
+ }
+ }
+
+ private void copyAgentLibDependencies(MavenGav gav) {
+ try {
+ List<MavenArtifact> artifacts = getDownloader().resolveArtifacts(
+ List.of(gav.toString()), Set.of(), true, gav.getVersion().contains("SNAPSHOT"));
+ for (MavenArtifact artifact : artifacts) {
+ Path target = Paths.get(BUILD_DIR, "agent", artifact.getFile().getName());
+ if (Files.exists(target) || EXCLUDED_GROUP_IDS.contains(artifact.getGav().getGroupId())) {
+ continue;
+ }
+ Files.copy(artifact.getFile().toPath(), target);
+ }
+ } catch (MavenResolutionException e) {
+ System.err.println("Error resolving the artifact: " + gav + " due to: " + e.getMessage());
+ } catch (IOException e) {
+ System.err.println("Error copying the artifact: " + gav + " due to: " + e.getMessage());
+ }
+ }
+
+ private MavenDownloader getDownloader() {
+ if (downloader == null) {
+ init();
+ }
+ return downloader;
+ }
+
+ private void init() {
+ this.downloader = new MavenDownloaderImpl();
+ ((MavenDownloaderImpl) downloader).build();
+ }
+
static class FilesConsumer extends ParameterConsumer<Export> {
@Override
protected void doConsumeParameters(Stack<String> args, Export cmd) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
index bb9110b3ff0..e39290f0f9a 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
@@ -130,6 +130,9 @@ class ExportCamelMain extends Export {
Set<String> deps = resolveDependencies(settings, profile);
// copy local lib JARs
copyLocalLibDependencies(deps);
+ // copy agent JARs and remove as dependency
+ copyAgentDependencies(deps);
+ deps.removeIf(d -> d.startsWith("agent:"));
if ("maven".equals(buildTool)) {
createMavenPom(settings, profile, new File(BUILD_DIR, "pom.xml"), deps, srcPackageName);
if (mavenWrapper) {
diff --git a/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenGav.java b/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenGav.java
index 3e0127b0c9d..1fe0be511be 100644
--- a/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenGav.java
+++ b/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenGav.java
@@ -97,6 +97,10 @@ public final class MavenGav {
} else if (defaultVersion != null) {
answer.setVersion(defaultVersion);
}
+ } else if (gav.startsWith("agent:")) {
+ // special for java agent JARs
+ answer = parseGav(gav.substring(6));
+ answer.setPackaging("agent");
} else {
// for those used to OSGi's pax-url-aether syntax
String[] parts = gav.startsWith("mvn:") ? gav.substring(4).split(":") : gav.split(":");
diff --git a/tooling/camel-tooling-maven/src/test/java/org/apache/camel/tooling/maven/MavenGavTest.java b/tooling/camel-tooling-maven/src/test/java/org/apache/camel/tooling/maven/MavenGavTest.java
index 7ead04cc8c6..aaa02a45151 100644
--- a/tooling/camel-tooling-maven/src/test/java/org/apache/camel/tooling/maven/MavenGavTest.java
+++ b/tooling/camel-tooling-maven/src/test/java/org/apache/camel/tooling/maven/MavenGavTest.java
@@ -49,4 +49,14 @@ class MavenGavTest {
assertEquals("junit-api", gav.getArtifactId());
assertEquals("99.99", gav.getVersion());
}
+
+ @Test
+ void parseAgentGav() {
+ MavenGav gav = MavenGav.parseGav("agent:io.opentelemetry.javaagent:opentelemetry-javaagent:1.31.0");
+
+ assertEquals("io.opentelemetry.javaagent", gav.getGroupId());
+ assertEquals("opentelemetry-javaagent", gav.getArtifactId());
+ assertEquals("1.31.0", gav.getVersion());
+ assertEquals("agent", gav.getPackaging());
+ }
}
(camel) 02/02: CAMEL-20033: camel-jbang - Write to settings properties file using JDK Properties code that escapes key and value so it works on Windows.
Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch jb-agent
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8fa9ce25667f2cbe9b26fbb345f4cba7f5ba8bf9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Nov 9 12:19:54 2023 +0100
CAMEL-20033: camel-jbang - Write to settings properties file using JDK Properties code that escapes key and value so it works on Windows.
---
.../camel/dsl/jbang/core/common/RuntimeUtil.java | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
index 97d985590b6..834acfb682e 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeUtil.java
@@ -19,6 +19,8 @@ package org.apache.camel.dsl.jbang.core.common;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.StringReader;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
@@ -99,17 +101,21 @@ public final class RuntimeUtil {
}
public static List<String> loadPropertiesLines(File file) throws IOException {
- List<String> lines = new ArrayList<>();
if (!file.exists()) {
- return lines;
+ return new ArrayList<>();
}
- Properties prop = new OrderedProperties();
- loadProperties(prop, file);
- for (String k : prop.stringPropertyNames()) {
- String v = prop.getProperty(k);
- if (v != null) {
- lines.add(k + "=" + v);
+ List<String> lines = new ArrayList<>();
+ for (String line : Files.readAllLines(file.toPath())) {
+ // need to use java.util.Properties to read raw value and un-escape
+ Properties prop = new OrderedProperties();
+ prop.load(new StringReader(line));
+
+ for (String key : prop.stringPropertyNames()) {
+ String value = prop.getProperty(key);
+ if (value != null) {
+ lines.add(key + "=" + value);
+ }
}
}
return lines;