KARAF-3982: wire this up to the Builder and the mojo.
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/2b170904 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/2b170904 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/2b170904 Branch: refs/heads/master Commit: 2b1709045d79ea0d24e3cc4bd5d4b762b460872a Parents: 04840c8 Author: Benson Margulies <[email protected]> Authored: Wed Sep 9 10:35:21 2015 -0400 Committer: Benson Margulies <[email protected]> Committed: Wed Sep 9 10:35:21 2015 -0400 ---------------------------------------------------------------------- profile/pom.xml | 6 ++ .../apache/karaf/profile/assembly/Builder.java | 25 +++++++ tooling/karaf-maven-plugin/pom.xml | 8 +- .../src/it/test-assembly-prop-edits/pom.xml | 78 ++++++++++++++++++++ .../org/apache/karaf/tooling/AssemblyMojo.java | 46 ++++++++++++ tooling/utils/pom.xml | 11 +++ 6 files changed, 171 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/2b170904/profile/pom.xml ---------------------------------------------------------------------- diff --git a/profile/pom.xml b/profile/pom.xml index 2045cb3..fc3c2a5 100644 --- a/profile/pom.xml +++ b/profile/pom.xml @@ -71,6 +71,12 @@ </dependency> <dependency> + <groupId>org.apache.karaf.tooling</groupId> + <artifactId>org.apache.karaf.tools.utils</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>org.apache.karaf.shell</groupId> <artifactId>org.apache.karaf.shell.core</artifactId> <optional>true</optional> http://git-wip-us.apache.org/repos/asf/karaf/blob/2b170904/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java ---------------------------------------------------------------------- diff --git a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java index dd0e623..b644ac3 100644 --- a/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java +++ b/profile/src/main/java/org/apache/karaf/profile/assembly/Builder.java @@ -75,6 +75,9 @@ import org.apache.karaf.kar.internal.Kar; import org.apache.karaf.profile.Profile; import org.apache.karaf.profile.ProfileBuilder; import org.apache.karaf.profile.impl.Profiles; +import org.apache.karaf.tools.utils.KarafPropertiesEditor; +import org.apache.karaf.tools.utils.model.KarafPropertyEdit; +import org.apache.karaf.tools.utils.model.KarafPropertyEdits; import org.apache.karaf.util.config.PropertiesLoader; import org.apache.karaf.util.maven.Parser; import org.ops4j.pax.url.mvn.MavenResolver; @@ -154,6 +157,7 @@ public class Builder { private Path etcDirectory; private Path systemDirectory; private Map<String, Profile> allProfiles; + private KarafPropertyEdits propertyEdits; public static Builder newInstance() { return new Builder(); @@ -336,6 +340,16 @@ public class Builder { return this; } + /** + * Specify a set of edits to apply when moving etc files. + * @param propertyEdits the edits. + * @return this. + */ + public Builder propertyEdits(KarafPropertyEdits propertyEdits) { + this.propertyEdits = propertyEdits; + return this; + } + public List<String> getBlacklistedProfiles() { return blacklistedProfiles; } @@ -486,6 +500,8 @@ public class Builder { } }, false, false, true); + Map<String, List<KarafPropertyEdit>> editsByFile = new HashMap<>(); + // // Write config and system properties // @@ -522,6 +538,15 @@ public class Builder { Files.write(configFile, config.getValue()); } + // 'improve' configuration files. + if (propertyEdits != null) { + KarafPropertiesEditor editor = new KarafPropertiesEditor(); + editor.setInputEtc(etcDirectory.toFile()) + .setOutputEtc(etcDirectory.toFile()) + .setEdits(propertyEdits); + editor.run(); + } + // // Handle overrides // http://git-wip-us.apache.org/repos/asf/karaf/blob/2b170904/tooling/karaf-maven-plugin/pom.xml ---------------------------------------------------------------------- diff --git a/tooling/karaf-maven-plugin/pom.xml b/tooling/karaf-maven-plugin/pom.xml index 9aa63d4..67998e4 100644 --- a/tooling/karaf-maven-plugin/pom.xml +++ b/tooling/karaf-maven-plugin/pom.xml @@ -92,13 +92,15 @@ <groupId>org.apache.karaf</groupId> <artifactId>org.apache.karaf.util</artifactId> </dependency> - - + <dependency> + <groupId>org.apache.karaf.tooling</groupId> + <artifactId>org.apache.karaf.tools.utils</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> </dependency> - <dependency> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-filtering</artifactId> http://git-wip-us.apache.org/repos/asf/karaf/blob/2b170904/tooling/karaf-maven-plugin/src/it/test-assembly-prop-edits/pom.xml ---------------------------------------------------------------------- diff --git a/tooling/karaf-maven-plugin/src/it/test-assembly-prop-edits/pom.xml b/tooling/karaf-maven-plugin/src/it/test-assembly-prop-edits/pom.xml new file mode 100644 index 0000000..886ef11 --- /dev/null +++ b/tooling/karaf-maven-plugin/src/it/test-assembly-prop-edits/pom.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> +<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + + <groupId>test</groupId> + <artifactId>test-assembl-prop-edits</artifactId> + <version>1.0-SNAPSHOT</version> + <packaging>karaf-assembly</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + <dependencies> + <dependency> + <groupId>org.apache.karaf.features</groupId> + <artifactId>framework</artifactId> + <version>@pom.version@</version> + <type>kar</type> + </dependency> + <dependency> + <groupId>org.apache.karaf.features</groupId> + <artifactId>standard</artifactId> + <version>@pom.version@</version> + <classifier>features</classifier> + <type>xml</type> + <scope>runtime</scope> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.karaf.tooling</groupId> + <artifactId>karaf-maven-plugin</artifactId> + <version>@pom.version@</version> + <extensions>true</extensions> + <configuration> + <finalName>${project.artifactId}</finalName> + <bootFeatures> + <feature>bundle</feature> + <feature>config</feature> + <feature>diagnostic</feature> + <feature>feature</feature> + <feature>jaas</feature> + <feature>shell</feature> + <feature>log</feature> + <feature>management</feature> + <feature>package</feature> + <feature>shell-compat</feature> + <feature>ssh</feature> + <feature>system</feature> + <feature>wrap</feature> + </bootFeatures> + <archiveZip>false</archiveZip> + </configuration> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/karaf/blob/2b170904/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java ---------------------------------------------------------------------- diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java index 44ebcbe..c0653c5 100644 --- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java +++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/AssemblyMojo.java @@ -22,6 +22,9 @@ import org.apache.karaf.profile.assembly.Builder; import org.apache.karaf.tooling.utils.IoUtils; import org.apache.karaf.tooling.utils.MavenUtil; import org.apache.karaf.tooling.utils.MojoSupport; +import org.apache.karaf.tools.utils.KarafPropertiesEditor; +import org.apache.karaf.tools.utils.model.KarafPropertyEdits; +import org.apache.karaf.tools.utils.model.io.stax.KarafPropertyInstructionsModelStaxReader; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -31,6 +34,8 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.attribute.PosixFilePermissions; import java.util.ArrayList; @@ -173,6 +178,35 @@ public class AssemblyMojo extends MojoSupport { @Parameter(defaultValue = "1.7") protected String javase; + /** + * Specify an XML file that instructs this goal to apply edits to + * one or more standard Karaf property files. This allows you to + * customize these files without making copies in your resources + * directories. Here's a simple example: + * <pre> + * {@literal + <property-edits xmlns="http://karaf.apache.org/tools/property-edits/1.0.0"> + <edits> + <edit> + <file>config.properties</file> + <operation>put</operation> + <key>karaf.framework</key> + <value>equinox</value> + </edit> + <edit> + <file>config.properties</file> + <operation>extend</operation> + <key>org.osgi.framework.system.capabilities</key> + <value>my-magic-capability</value> + </edit> + </edits> + </property-edits> + </pre> + } + */ + @Parameter(defaultValue = "${project.basedir}/src/main/karaf/assembly-property-edits.xml") + protected String propertyFileEdits; + @Override public void execute() throws MojoExecutionException, MojoFailureException { try { @@ -226,6 +260,18 @@ public class AssemblyMojo extends MojoSupport { builder.blacklistProfiles(blacklistedProfiles); builder.blacklistPolicy(blacklistPolicy); + if (propertyFileEdits != null) { + File file = new File(propertyFileEdits); + if (file.exists()) { + KarafPropertyEdits edits; + try (InputStream editsStream = new FileInputStream(propertyFileEdits)) { + KarafPropertyInstructionsModelStaxReader kipmsr = new KarafPropertyInstructionsModelStaxReader(); + edits = kipmsr.read(editsStream, true); + } + builder.propertyEdits(edits); + } + } + // creating system directory getLog().info("Creating work directory"); builder.homeDirectory(workDirectory.toPath()); http://git-wip-us.apache.org/repos/asf/karaf/blob/2b170904/tooling/utils/pom.xml ---------------------------------------------------------------------- diff --git a/tooling/utils/pom.xml b/tooling/utils/pom.xml index ece56ce..7688e25 100644 --- a/tooling/utils/pom.xml +++ b/tooling/utils/pom.xml @@ -69,6 +69,17 @@ <version>1.0.0</version> </configuration> </plugin> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <configuration> + <instructions> + <Export-Package> + org.apache.karaf.tools.utils + </Export-Package> + </instructions> + </configuration> + </plugin> </plugins> </build> </project>
