summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-04-06 14:19:35 +0200
committerGitHub <noreply@github.com>2021-04-06 14:19:35 +0200
commit778894b29b13831115c19ff13285541a10ab2d30 (patch)
tree62ea7aa8689a3d5421f54cd0ac6c5290e82f23dc
parent5df00bb90a04082847440716bcb6146bdda0ca06 (diff)
Revert "Gjoranv/merge di into core (rebased)"
-rw-r--r--CMakeLists.txt2
-rw-r--r--Code-map.md3
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java11
-rw-r--r--cloud-tenant-base-dependencies-enforcer/pom.xml1
-rw-r--r--component/CMakeLists.txt2
-rw-r--r--component/abi-spec.json15
-rwxr-xr-xcomponent/pom.xml7
-rw-r--r--component/src/main/java/com/yahoo/container/di/componentgraph/package-info.java12
-rw-r--r--container-core/pom.xml33
-rw-r--r--container-di/.gitignore2
-rw-r--r--container-di/CMakeLists.txt2
-rw-r--r--container-di/OWNERS1
-rw-r--r--container-di/README.md4
-rw-r--r--container-di/abi-spec.json17
-rw-r--r--container-di/benchmarks/src/test/java/com/yahoo/component/ComponentIdBenchmark.java50
-rw-r--r--container-di/pom.xml127
-rw-r--r--container-di/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java (renamed from container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/bundle/MockBundle.java (renamed from container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/bundle/package-info.java (renamed from container-core/src/main/java/com/yahoo/container/bundle/package-info.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java (renamed from container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java (renamed from container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java (renamed from container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/Container.java (renamed from container-core/src/main/java/com/yahoo/container/di/Container.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/Osgi.java (renamed from container-core/src/main/java/com/yahoo/container/di/Osgi.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/Provider.java (renamed from component/src/main/java/com/yahoo/container/di/componentgraph/Provider.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentRegistryNode.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentRegistryNode.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/GuiceNode.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/GuiceNode.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Keys.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Keys.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Node.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Node.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/core/package-info.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/core/package-info.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/cycle/CycleFinder.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/cycle/CycleFinder.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/cycle/Graph.java (renamed from container-core/src/main/java/com/yahoo/container/di/componentgraph/cycle/Graph.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/componentgraph/package-info.java7
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/config/ResolveDependencyException.java (renamed from container-core/src/main/java/com/yahoo/container/di/config/ResolveDependencyException.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/config/RestApiContext.java (renamed from container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java (renamed from container-core/src/main/java/com/yahoo/container/di/config/Subscriber.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java (renamed from container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/config/package-info.java (renamed from container-core/src/main/java/com/yahoo/container/di/config/package-info.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/osgi/BundleClasses.java (renamed from container-core/src/main/java/com/yahoo/container/di/osgi/BundleClasses.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/osgi/OsgiUtil.java (renamed from container-core/src/main/java/com/yahoo/container/di/osgi/OsgiUtil.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/container/di/osgi/package-info.java (renamed from container-core/src/main/java/com/yahoo/container/di/osgi/package-info.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/osgi/provider/model/ComponentModel.java (renamed from container-core/src/main/java/com/yahoo/osgi/provider/model/ComponentModel.java)0
-rw-r--r--container-di/src/main/java/com/yahoo/osgi/provider/model/package-info.java (renamed from container-core/src/main/java/com/yahoo/osgi/provider/model/package-info.java)0
-rw-r--r--container-di/src/main/resources/configdefinitions/application-bundles.def (renamed from container-core/src/main/resources/configdefinitions/application-bundles.def)0
-rw-r--r--container-di/src/main/resources/configdefinitions/container.components.def (renamed from container-core/src/main/resources/configdefinitions/container.components.def)0
-rw-r--r--container-di/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def (renamed from container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def)0
-rw-r--r--container-di/src/main/resources/configdefinitions/container.di.config.jersey-injection.def (renamed from container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def)0
-rw-r--r--container-di/src/main/resources/configdefinitions/platform-bundles.def (renamed from container-core/src/main/resources/configdefinitions/platform-bundles.def)0
-rw-r--r--container-di/src/test/java/com/yahoo/component/ComponentSpecTestCase.java (renamed from container-core/src/test/java/com/yahoo/component/ComponentSpecTestCase.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/component/provider/test/ComponentRegistryTestCase.java (renamed from container-core/src/test/java/com/yahoo/component/provider/test/ComponentRegistryTestCase.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/component/test/ComponentIdTestCase.java (renamed from container-core/src/test/java/com/yahoo/component/test/ComponentIdTestCase.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/ContainerTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/ContainerTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/ContainerTestBase.java (renamed from container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/DirConfigSource.java (renamed from container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/core/FallbackToGuiceInjectorTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/componentgraph/core/FallbackToGuiceInjectorTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ReuseComponentsTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ReuseComponentsTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/cycle/CycleFinderTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/componentgraph/cycle/CycleFinderTest.java)0
-rw-r--r--container-di/src/test/java/com/yahoo/container/di/componentgraph/cycle/GraphTest.java (renamed from container-core/src/test/java/com/yahoo/container/di/componentgraph/cycle/GraphTest.java)0
-rw-r--r--container-di/src/test/vespa-configdef/config.di.int.def (renamed from container-core/src/test/vespa-configdef/config.di.int.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.di.string.def (renamed from container-core/src/test/vespa-configdef/config.di.string.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.test.bootstrap1.def (renamed from container-core/src/test/vespa-configdef/config.test.bootstrap1.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.test.bootstrap2.def (renamed from container-core/src/test/vespa-configdef/config.test.bootstrap2.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.test.components1.def (renamed from container-core/src/test/vespa-configdef/config.test.components1.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.test.test.def (renamed from container-core/src/test/vespa-configdef/config.test.test.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.test.test2.def (renamed from container-core/src/test/vespa-configdef/config.test.test2.def)0
-rw-r--r--container-di/src/test/vespa-configdef/config.test.thread-pool.def (renamed from container-core/src/test/vespa-configdef/config.test.thread-pool.def)0
-rw-r--r--container-disc/pom.xml3
-rw-r--r--container-jersey2/pom.xml2
-rw-r--r--container-messagebus/pom.xml6
-rw-r--r--dist/vespa.spec1
-rw-r--r--metrics-proxy/pom.xml6
-rw-r--r--metrics/pom.xml33
-rw-r--r--pom.xml1
-rw-r--r--simplemetrics/pom.xml6
81 files changed, 314 insertions, 40 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 059851205cb..1b4a87aa39c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,6 +45,7 @@ include_directories(BEFORE ${CMAKE_BINARY_DIR}/configdefinitions/src)
add_subdirectory(application-model)
add_subdirectory(application-preprocessor)
add_subdirectory(athenz-identity-provider-service)
+add_subdirectory(component)
add_subdirectory(config-bundle)
add_subdirectory(config-model)
add_subdirectory(config-model-api)
@@ -59,6 +60,7 @@ add_subdirectory(configserver)
add_subdirectory(configserver-flags)
add_subdirectory(configutil)
add_subdirectory(container-core)
+add_subdirectory(container-di)
add_subdirectory(container-disc)
add_subdirectory(container-jersey2)
add_subdirectory(container-messagebus)
diff --git a/Code-map.md b/Code-map.md
index fd5a583bc79..a02b52c76a8 100644
--- a/Code-map.md
+++ b/Code-map.md
@@ -44,8 +44,9 @@ jDisc core modules:
jDisc container modules, layered on jDisc core:
- [container-disc](https://github.com/vespa-engine/vespa/tree/master/container-disc) - integration between the jDisc container and jDisc core layers.
-- [container-core](https://github.com/vespa-engine/vespa/tree/master/container-core) - core jDisc container functionality: Metrics, OSGi integration for component bundles, dependency injection, HTTP connector, etc.
+- [container-core](https://github.com/vespa-engine/vespa/tree/master/container-core) - core jDisc container functionality: Metrics, OSGi integration for component bundles, HTTP connector, etc.
- [component](https://github.com/vespa-engine/vespa/tree/master/component) - the component model. Components (in Java) will implement or subclass a type for this module.
+- [container-di](https://github.com/vespa-engine/vespa/tree/master/container-di) - component dependency injection framework for the container, compatible with Guice annotations but an separate implementation which handles injection of config and injection of component collections.
Search container, layered on jDisc container:
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java
index e1d199c4c9b..31c8049b0dd 100644
--- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java
@@ -61,13 +61,12 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo {
public void execute() throws MojoExecutionException {
try {
- if (discPreInstallBundle != null && ! buildLegacyVespaPlatformBundle)
+ if (discPreInstallBundle != null && !buildLegacyVespaPlatformBundle)
throw new MojoExecutionException("The 'discPreInstallBundle' parameter can only be used by legacy Vespa platform bundles.");
Artifacts.ArtifactSet artifactSet = Artifacts.getArtifacts(project);
warnOnUnsupportedArtifacts(artifactSet.getNonJarArtifacts());
- if (! isContainerDiscArtifact(project.getArtifact()))
- throwIfInternalContainerArtifactsAreIncluded(artifactSet.getJarArtifactsToInclude());
+ warnIfInternalContainerArtifactsAreIncluded(artifactSet.getJarArtifactsToInclude());
List<Export> exportedPackagesFromProvidedJars = exportedPackagesAggregated(
artifactSet.getJarArtifactsProvided().stream().map(Artifact::getFile).collect(Collectors.toList()));
@@ -189,7 +188,7 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo {
artifact.getId(), artifact.getType())));
}
- private void throwIfInternalContainerArtifactsAreIncluded(Collection<Artifact> includedArtifacts) throws MojoExecutionException {
+ private void warnIfInternalContainerArtifactsAreIncluded(Collection<Artifact> includedArtifacts) throws MojoExecutionException {
/* In most cases it's sufficient to test for 'component', as it's the lowest level container artifact,
* Embedding container artifacts will cause class loading issues at runtime, because the classes will
* not be equal to those seen by the framework (e.g. AbstractComponent). */
@@ -205,10 +204,6 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo {
return a.getArtifactId().equals("component") && a.getGroupId().equals("com.yahoo.vespa");
}
- private boolean isContainerDiscArtifact(Artifact a) {
- return a.getArtifactId().equals("container-disc") && a.getGroupId().equals("com.yahoo.vespa");
- }
-
private PackageTally getProjectClassesTally() {
File outputDirectory = new File(project.getBuild().getOutputDirectory());
diff --git a/cloud-tenant-base-dependencies-enforcer/pom.xml b/cloud-tenant-base-dependencies-enforcer/pom.xml
index 0299afd001d..8a504635f25 100644
--- a/cloud-tenant-base-dependencies-enforcer/pom.xml
+++ b/cloud-tenant-base-dependencies-enforcer/pom.xml
@@ -150,6 +150,7 @@
<include>com.yahoo.vespa:configgen:*:jar:provided</include>
<include>com.yahoo.vespa:container-core:*:jar:provided</include>
<include>com.yahoo.vespa:container-dev:*:jar:provided</include>
+ <include>com.yahoo.vespa:container-di:*:jar:provided</include>
<include>com.yahoo.vespa:container-disc:*:jar:provided</include>
<include>com.yahoo.vespa:container-documentapi:*:jar:provided</include>
<include>com.yahoo.vespa:container-jersey2:*:jar:provided</include>
diff --git a/component/CMakeLists.txt b/component/CMakeLists.txt
new file mode 100644
index 00000000000..87d0a4989ba
--- /dev/null
+++ b/component/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+install_fat_java_artifact(component)
diff --git a/component/abi-spec.json b/component/abi-spec.json
index 0e33fde3c5a..2dfa3e0d71d 100644
--- a/component/abi-spec.json
+++ b/component/abi-spec.json
@@ -348,20 +348,5 @@
"public bridge synthetic java.lang.Object clone()"
],
"fields": []
- },
- "com.yahoo.container.di.componentgraph.Provider": {
- "superClass": "java.lang.Object",
- "interfaces": [
- "com.yahoo.component.Deconstructable"
- ],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract java.lang.Object get()"
- ],
- "fields": []
}
} \ No newline at end of file
diff --git a/component/pom.xml b/component/pom.xml
index 4d7b716445a..75b07643c7e 100755
--- a/component/pom.xml
+++ b/component/pom.xml
@@ -12,7 +12,7 @@
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>component</artifactId>
- <packaging>jar</packaging>
+ <packaging>container-plugin</packaging>
<version>7-SNAPSHOT</version>
<dependencies>
<dependency>
@@ -59,6 +59,11 @@
<build>
<plugins>
<plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
diff --git a/component/src/main/java/com/yahoo/container/di/componentgraph/package-info.java b/component/src/main/java/com/yahoo/container/di/componentgraph/package-info.java
deleted file mode 100644
index 054abe9cff9..00000000000
--- a/component/src/main/java/com/yahoo/container/di/componentgraph/package-info.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-/**
- * Note that this package also exists in another Vespa module, for historical
- * reasons. All Java classes should be kept in this module, and the other
- * module's package should remain empty.
- */
-@ExportPackage
-@PublicApi
-package com.yahoo.container.di.componentgraph;
-
-import com.yahoo.api.annotations.PublicApi;
-import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/container-core/pom.xml b/container-core/pom.xml
index bc40984d934..d0722a081d1 100644
--- a/container-core/pom.xml
+++ b/container-core/pom.xml
@@ -13,7 +13,7 @@
</parent>
<artifactId>container-core</artifactId>
<version>7-SNAPSHOT</version>
- <packaging>jar</packaging>
+ <packaging>container-plugin</packaging>
<dependencies>
<!-- COMPILE scope -->
@@ -24,6 +24,11 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-di</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>container-documentapi</artifactId>
<version>${project.version}</version>
</dependency>
@@ -144,6 +149,16 @@
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<!-- TODO Vespa 8: stop providing org.json:json -->
<groupId>org.json</groupId>
<artifactId>json</artifactId>
@@ -312,6 +327,17 @@
<build>
<plugins>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestEntries>
+ <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>com.yahoo.vespa</groupId>
<artifactId>config-class-plugin</artifactId>
<version>${project.version}</version>
@@ -336,6 +362,11 @@
</executions>
</plugin>
<plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
diff --git a/container-di/.gitignore b/container-di/.gitignore
new file mode 100644
index 00000000000..3cc25b51fc4
--- /dev/null
+++ b/container-di/.gitignore
@@ -0,0 +1,2 @@
+/pom.xml.build
+/target
diff --git a/container-di/CMakeLists.txt b/container-di/CMakeLists.txt
new file mode 100644
index 00000000000..7bb25e6a420
--- /dev/null
+++ b/container-di/CMakeLists.txt
@@ -0,0 +1,2 @@
+# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+install_config_definitions()
diff --git a/container-di/OWNERS b/container-di/OWNERS
new file mode 100644
index 00000000000..3b2ba1ede81
--- /dev/null
+++ b/container-di/OWNERS
@@ -0,0 +1 @@
+gjoranv
diff --git a/container-di/README.md b/container-di/README.md
new file mode 100644
index 00000000000..0eeb9d7280f
--- /dev/null
+++ b/container-di/README.md
@@ -0,0 +1,4 @@
+<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+# Container DI
+
+JDisc's dependency injection framework.
diff --git a/container-di/abi-spec.json b/container-di/abi-spec.json
new file mode 100644
index 00000000000..02cc29cd07f
--- /dev/null
+++ b/container-di/abi-spec.json
@@ -0,0 +1,17 @@
+{
+ "com.yahoo.container.di.componentgraph.Provider": {
+ "superClass": "java.lang.Object",
+ "interfaces": [
+ "com.yahoo.component.Deconstructable"
+ ],
+ "attributes": [
+ "public",
+ "interface",
+ "abstract"
+ ],
+ "methods": [
+ "public abstract java.lang.Object get()"
+ ],
+ "fields": []
+ }
+} \ No newline at end of file
diff --git a/container-di/benchmarks/src/test/java/com/yahoo/component/ComponentIdBenchmark.java b/container-di/benchmarks/src/test/java/com/yahoo/component/ComponentIdBenchmark.java
new file mode 100644
index 00000000000..bcdaff110e1
--- /dev/null
+++ b/container-di/benchmarks/src/test/java/com/yahoo/component/ComponentIdBenchmark.java
@@ -0,0 +1,50 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.component;
+
+/**
+ * @author baldersheim
+ */
+public class ComponentIdBenchmark {
+ public void run() {
+ boolean result=true;
+ String strings[] = createStrings(1000);
+ // Warm-up
+ out("Warming up...");
+ for (int i=0; i<30*1000; i++)
+ result = result ^ createComponentId(strings);
+
+ long startTime=System.currentTimeMillis();
+ out("Running...");
+ for (int i=0; i<100*1000; i++)
+ result = result ^ createComponentId(strings);
+ out("Ignore this: " + result); // Make sure we are not fooled by optimization by creating an observable result
+ long endTime=System.currentTimeMillis();
+ out("Create anonymous component ids of 1000 strings 100.000 times took " + (endTime-startTime) + " ms");
+ }
+
+ private final String [] createStrings(int num) {
+ String strings [] = new String [num];
+ for(int i=0; i < strings.length; i++) {
+ strings[i] = "this.is.a.short.compound.name." + i;
+ }
+ return strings;
+ }
+
+ private final boolean createComponentId(String [] strings) {
+ boolean retval = true;
+ for (int i=0; i < strings.length; i++) {
+ ComponentId n = ComponentId.createAnonymousComponentId(strings[i]);
+ retval = retval ^ n.isAnonymous();
+ }
+ return retval;
+ }
+
+ private void out(String string) {
+ System.out.println(string);
+ }
+
+ public static void main(String[] args) {
+ new ComponentIdBenchmark().run();
+ }
+
+}
diff --git a/container-di/pom.xml b/container-di/pom.xml
new file mode 100644
index 00000000000..f0778f7d45e
--- /dev/null
+++ b/container-di/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0"?>
+<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>parent</artifactId>
+ <version>7-SNAPSHOT</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+ <artifactId>container-di</artifactId>
+ <version>7-SNAPSHOT</version>
+ <packaging>container-plugin</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>annotations</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-library</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>jdisc_core</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespajlib</artifactId>
+ <version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-bundle</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject</groupId>
+ <artifactId>guice</artifactId>
+ <classifier>no_aop</classifier>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>component</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-class-plugin</artifactId>
+ <version>${project.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>config-gen</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>configgen-test-defs</id>
+ <phase>generate-test-sources</phase>
+ <goals>
+ <goal>config-gen</goal>
+ </goals>
+ <configuration>
+ <defFilesDirectories>src/test/vespa-configdef</defFilesDirectories>
+ <outputDirectory>target/generated-test-sources/vespa-configgen-plugin</outputDirectory>
+ <testConfig>true</testConfig>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <forkMode>once</forkMode>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>abi-check-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java b/container-di/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java
index 0fb8a99a957..0fb8a99a957 100644
--- a/container-core/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java
+++ b/container-di/src/main/java/com/yahoo/container/bundle/BundleInstantiationSpecification.java
diff --git a/container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java b/container-di/src/main/java/com/yahoo/container/bundle/MockBundle.java
index a6524b41886..a6524b41886 100644
--- a/container-core/src/main/java/com/yahoo/container/bundle/MockBundle.java
+++ b/container-di/src/main/java/com/yahoo/container/bundle/MockBundle.java
diff --git a/container-core/src/main/java/com/yahoo/container/bundle/package-info.java b/container-di/src/main/java/com/yahoo/container/bundle/package-info.java
index c9707371626..c9707371626 100644
--- a/container-core/src/main/java/com/yahoo/container/bundle/package-info.java
+++ b/container-di/src/main/java/com/yahoo/container/bundle/package-info.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java b/container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java
index 065733a719a..065733a719a 100644
--- a/container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java
+++ b/container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java b/container-di/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java
index 4e3881a6fe6..4e3881a6fe6 100644
--- a/container-core/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java
+++ b/container-di/src/main/java/com/yahoo/container/di/ComponentDeconstructor.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java b/container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java
index a7ff6c46a8b..a7ff6c46a8b 100644
--- a/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java
+++ b/container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/Container.java b/container-di/src/main/java/com/yahoo/container/di/Container.java
index 82c7f65bc2a..82c7f65bc2a 100644
--- a/container-core/src/main/java/com/yahoo/container/di/Container.java
+++ b/container-di/src/main/java/com/yahoo/container/di/Container.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/Osgi.java b/container-di/src/main/java/com/yahoo/container/di/Osgi.java
index 940986e2f38..940986e2f38 100644
--- a/container-core/src/main/java/com/yahoo/container/di/Osgi.java
+++ b/container-di/src/main/java/com/yahoo/container/di/Osgi.java
diff --git a/component/src/main/java/com/yahoo/container/di/componentgraph/Provider.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/Provider.java
index 3fd3195e5dd..3fd3195e5dd 100644
--- a/component/src/main/java/com/yahoo/container/di/componentgraph/Provider.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/Provider.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java
index fef2809f236..fef2809f236 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentGraph.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java
index b6fa4241e26..b6fa4241e26 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentNode.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentRegistryNode.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentRegistryNode.java
index 429052c0039..429052c0039 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentRegistryNode.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/ComponentRegistryNode.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
index b0d9d1f3921..b0d9d1f3921 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Exceptions.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/GuiceNode.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/GuiceNode.java
index 61d0d9bba8d..61d0d9bba8d 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/GuiceNode.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/GuiceNode.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java
index 0f8aa678934..0f8aa678934 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/JerseyNode.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Keys.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Keys.java
index be80fc1616d..be80fc1616d 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Keys.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Keys.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Node.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Node.java
index 3afc8bb817c..3afc8bb817c 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/Node.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/Node.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/package-info.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/package-info.java
index e9b5b14d5d8..e9b5b14d5d8 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/core/package-info.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/core/package-info.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/cycle/CycleFinder.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/cycle/CycleFinder.java
index 327949bb8d0..327949bb8d0 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/cycle/CycleFinder.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/cycle/CycleFinder.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/componentgraph/cycle/Graph.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/cycle/Graph.java
index 946330668bd..946330668bd 100644
--- a/container-core/src/main/java/com/yahoo/container/di/componentgraph/cycle/Graph.java
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/cycle/Graph.java
diff --git a/container-di/src/main/java/com/yahoo/container/di/componentgraph/package-info.java b/container-di/src/main/java/com/yahoo/container/di/componentgraph/package-info.java
new file mode 100644
index 00000000000..0c11cfb5ba4
--- /dev/null
+++ b/container-di/src/main/java/com/yahoo/container/di/componentgraph/package-info.java
@@ -0,0 +1,7 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+@PublicApi
+package com.yahoo.container.di.componentgraph;
+
+import com.yahoo.api.annotations.PublicApi;
+import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/container-core/src/main/java/com/yahoo/container/di/config/ResolveDependencyException.java b/container-di/src/main/java/com/yahoo/container/di/config/ResolveDependencyException.java
index c88f851909c..c88f851909c 100644
--- a/container-core/src/main/java/com/yahoo/container/di/config/ResolveDependencyException.java
+++ b/container-di/src/main/java/com/yahoo/container/di/config/ResolveDependencyException.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java b/container-di/src/main/java/com/yahoo/container/di/config/RestApiContext.java
index bfb9a8f9160..bfb9a8f9160 100644
--- a/container-core/src/main/java/com/yahoo/container/di/config/RestApiContext.java
+++ b/container-di/src/main/java/com/yahoo/container/di/config/RestApiContext.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/config/Subscriber.java b/container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java
index 60207447bfd..60207447bfd 100644
--- a/container-core/src/main/java/com/yahoo/container/di/config/Subscriber.java
+++ b/container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java b/container-di/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java
index c1c36a1b3de..c1c36a1b3de 100644
--- a/container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java
+++ b/container-di/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/config/package-info.java b/container-di/src/main/java/com/yahoo/container/di/config/package-info.java
index b8f65b1c3c8..b8f65b1c3c8 100644
--- a/container-core/src/main/java/com/yahoo/container/di/config/package-info.java
+++ b/container-di/src/main/java/com/yahoo/container/di/config/package-info.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/osgi/BundleClasses.java b/container-di/src/main/java/com/yahoo/container/di/osgi/BundleClasses.java
index bca3ed73d0b..bca3ed73d0b 100644
--- a/container-core/src/main/java/com/yahoo/container/di/osgi/BundleClasses.java
+++ b/container-di/src/main/java/com/yahoo/container/di/osgi/BundleClasses.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/osgi/OsgiUtil.java b/container-di/src/main/java/com/yahoo/container/di/osgi/OsgiUtil.java
index e1854155e5b..e1854155e5b 100644
--- a/container-core/src/main/java/com/yahoo/container/di/osgi/OsgiUtil.java
+++ b/container-di/src/main/java/com/yahoo/container/di/osgi/OsgiUtil.java
diff --git a/container-core/src/main/java/com/yahoo/container/di/osgi/package-info.java b/container-di/src/main/java/com/yahoo/container/di/osgi/package-info.java
index 9685cf571bd..9685cf571bd 100644
--- a/container-core/src/main/java/com/yahoo/container/di/osgi/package-info.java
+++ b/container-di/src/main/java/com/yahoo/container/di/osgi/package-info.java
diff --git a/container-core/src/main/java/com/yahoo/osgi/provider/model/ComponentModel.java b/container-di/src/main/java/com/yahoo/osgi/provider/model/ComponentModel.java
index 8c501963db3..8c501963db3 100644
--- a/container-core/src/main/java/com/yahoo/osgi/provider/model/ComponentModel.java
+++ b/container-di/src/main/java/com/yahoo/osgi/provider/model/ComponentModel.java
diff --git a/container-core/src/main/java/com/yahoo/osgi/provider/model/package-info.java b/container-di/src/main/java/com/yahoo/osgi/provider/model/package-info.java
index f930f56ae4a..f930f56ae4a 100644
--- a/container-core/src/main/java/com/yahoo/osgi/provider/model/package-info.java
+++ b/container-di/src/main/java/com/yahoo/osgi/provider/model/package-info.java
diff --git a/container-core/src/main/resources/configdefinitions/application-bundles.def b/container-di/src/main/resources/configdefinitions/application-bundles.def
index 7e03b1e3ac8..7e03b1e3ac8 100644
--- a/container-core/src/main/resources/configdefinitions/application-bundles.def
+++ b/container-di/src/main/resources/configdefinitions/application-bundles.def
diff --git a/container-core/src/main/resources/configdefinitions/container.components.def b/container-di/src/main/resources/configdefinitions/container.components.def
index f27abc2fa5a..f27abc2fa5a 100644
--- a/container-core/src/main/resources/configdefinitions/container.components.def
+++ b/container-di/src/main/resources/configdefinitions/container.components.def
diff --git a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def b/container-di/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def
index a226420274d..a226420274d 100644
--- a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def
+++ b/container-di/src/main/resources/configdefinitions/container.di.config.jersey-bundles.def
diff --git a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def b/container-di/src/main/resources/configdefinitions/container.di.config.jersey-injection.def
index 9f5be59abbd..9f5be59abbd 100644
--- a/container-core/src/main/resources/configdefinitions/container.di.config.jersey-injection.def
+++ b/container-di/src/main/resources/configdefinitions/container.di.config.jersey-injection.def
diff --git a/container-core/src/main/resources/configdefinitions/platform-bundles.def b/container-di/src/main/resources/configdefinitions/platform-bundles.def
index a30a846b565..a30a846b565 100644
--- a/container-core/src/main/resources/configdefinitions/platform-bundles.def
+++ b/container-di/src/main/resources/configdefinitions/platform-bundles.def
diff --git a/container-core/src/test/java/com/yahoo/component/ComponentSpecTestCase.java b/container-di/src/test/java/com/yahoo/component/ComponentSpecTestCase.java
index 6fe58e99fda..6fe58e99fda 100644
--- a/container-core/src/test/java/com/yahoo/component/ComponentSpecTestCase.java
+++ b/container-di/src/test/java/com/yahoo/component/ComponentSpecTestCase.java
diff --git a/container-core/src/test/java/com/yahoo/component/provider/test/ComponentRegistryTestCase.java b/container-di/src/test/java/com/yahoo/component/provider/test/ComponentRegistryTestCase.java
index 69eec95b746..69eec95b746 100644
--- a/container-core/src/test/java/com/yahoo/component/provider/test/ComponentRegistryTestCase.java
+++ b/container-di/src/test/java/com/yahoo/component/provider/test/ComponentRegistryTestCase.java
diff --git a/container-core/src/test/java/com/yahoo/component/test/ComponentIdTestCase.java b/container-di/src/test/java/com/yahoo/component/test/ComponentIdTestCase.java
index 0842ee4a797..0842ee4a797 100644
--- a/container-core/src/test/java/com/yahoo/component/test/ComponentIdTestCase.java
+++ b/container-di/src/test/java/com/yahoo/component/test/ComponentIdTestCase.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java b/container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java
index 290836d7842..290836d7842 100644
--- a/container-core/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/ConfigRetrieverTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java b/container-di/src/test/java/com/yahoo/container/di/ContainerTest.java
index b596246a43d..b596246a43d 100644
--- a/container-core/src/test/java/com/yahoo/container/di/ContainerTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/ContainerTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java b/container-di/src/test/java/com/yahoo/container/di/ContainerTestBase.java
index 2106a1f3671..2106a1f3671 100644
--- a/container-core/src/test/java/com/yahoo/container/di/ContainerTestBase.java
+++ b/container-di/src/test/java/com/yahoo/container/di/ContainerTestBase.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java b/container-di/src/test/java/com/yahoo/container/di/DirConfigSource.java
index ec937a1a4ef..ec937a1a4ef 100644
--- a/container-core/src/test/java/com/yahoo/container/di/DirConfigSource.java
+++ b/container-di/src/test/java/com/yahoo/container/di/DirConfigSource.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java
index 70dc4c8665c..70dc4c8665c 100644
--- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ComponentGraphTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/FallbackToGuiceInjectorTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/FallbackToGuiceInjectorTest.java
index 7c517d67960..7c517d67960 100644
--- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/FallbackToGuiceInjectorTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/FallbackToGuiceInjectorTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java
index f30f9260830..f30f9260830 100644
--- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/JerseyNodeTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ReuseComponentsTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ReuseComponentsTest.java
index e61e90cd718..e61e90cd718 100644
--- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/core/ReuseComponentsTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/core/ReuseComponentsTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/cycle/CycleFinderTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/cycle/CycleFinderTest.java
index 174ca301c59..174ca301c59 100644
--- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/cycle/CycleFinderTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/cycle/CycleFinderTest.java
diff --git a/container-core/src/test/java/com/yahoo/container/di/componentgraph/cycle/GraphTest.java b/container-di/src/test/java/com/yahoo/container/di/componentgraph/cycle/GraphTest.java
index 069f72ad8e7..069f72ad8e7 100644
--- a/container-core/src/test/java/com/yahoo/container/di/componentgraph/cycle/GraphTest.java
+++ b/container-di/src/test/java/com/yahoo/container/di/componentgraph/cycle/GraphTest.java
diff --git a/container-core/src/test/vespa-configdef/config.di.int.def b/container-di/src/test/vespa-configdef/config.di.int.def
index a34539c4a0f..a34539c4a0f 100644
--- a/container-core/src/test/vespa-configdef/config.di.int.def
+++ b/container-di/src/test/vespa-configdef/config.di.int.def
diff --git a/container-core/src/test/vespa-configdef/config.di.string.def b/container-di/src/test/vespa-configdef/config.di.string.def
index 396afe54f3f..396afe54f3f 100644
--- a/container-core/src/test/vespa-configdef/config.di.string.def
+++ b/container-di/src/test/vespa-configdef/config.di.string.def
diff --git a/container-core/src/test/vespa-configdef/config.test.bootstrap1.def b/container-di/src/test/vespa-configdef/config.test.bootstrap1.def
index bdee16d99ea..bdee16d99ea 100644
--- a/container-core/src/test/vespa-configdef/config.test.bootstrap1.def
+++ b/container-di/src/test/vespa-configdef/config.test.bootstrap1.def
diff --git a/container-core/src/test/vespa-configdef/config.test.bootstrap2.def b/container-di/src/test/vespa-configdef/config.test.bootstrap2.def
index b4fbffd8ae6..b4fbffd8ae6 100644
--- a/container-core/src/test/vespa-configdef/config.test.bootstrap2.def
+++ b/container-di/src/test/vespa-configdef/config.test.bootstrap2.def
diff --git a/container-core/src/test/vespa-configdef/config.test.components1.def b/container-di/src/test/vespa-configdef/config.test.components1.def
index bdee16d99ea..bdee16d99ea 100644
--- a/container-core/src/test/vespa-configdef/config.test.components1.def
+++ b/container-di/src/test/vespa-configdef/config.test.components1.def
diff --git a/container-core/src/test/vespa-configdef/config.test.test.def b/container-di/src/test/vespa-configdef/config.test.test.def
index d3e0ed17748..d3e0ed17748 100644
--- a/container-core/src/test/vespa-configdef/config.test.test.def
+++ b/container-di/src/test/vespa-configdef/config.test.test.def
diff --git a/container-core/src/test/vespa-configdef/config.test.test2.def b/container-di/src/test/vespa-configdef/config.test.test2.def
index d3e0ed17748..d3e0ed17748 100644
--- a/container-core/src/test/vespa-configdef/config.test.test2.def
+++ b/container-di/src/test/vespa-configdef/config.test.test2.def
diff --git a/container-core/src/test/vespa-configdef/config.test.thread-pool.def b/container-di/src/test/vespa-configdef/config.test.thread-pool.def
index 9e6b6694e84..9e6b6694e84 100644
--- a/container-core/src/test/vespa-configdef/config.test.thread-pool.def
+++ b/container-di/src/test/vespa-configdef/config.test.thread-pool.def
diff --git a/container-disc/pom.xml b/container-disc/pom.xml
index 92207802ed5..a78657b7f09 100644
--- a/container-disc/pom.xml
+++ b/container-disc/pom.xml
@@ -56,6 +56,7 @@
<groupId>com.yahoo.vespa</groupId>
<artifactId>component</artifactId>
<version>${project.version}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
@@ -166,6 +167,7 @@
<buildLegacyVespaPlatformBundle>true</buildLegacyVespaPlatformBundle>
<discPreInstallBundle>
<!-- Vespa bundles -->
+ component-jar-with-dependencies.jar,
configgen.jar,
config-bundle-jar-with-dependencies.jar,
configdefinitions-jar-with-dependencies.jar,
@@ -182,6 +184,7 @@
security-utils-jar-with-dependencies.jar,
simplemetrics-jar-with-dependencies.jar,
defaults-jar-with-dependencies.jar,
+ component-jar-with-dependencies.jar,
zkfacade-jar-with-dependencies.jar,
zookeeper-server-jar-with-dependencies.jar,
<!-- Jetty -->
diff --git a/container-jersey2/pom.xml b/container-jersey2/pom.xml
index 8f24b5edcb7..e94e2a46bba 100644
--- a/container-jersey2/pom.xml
+++ b/container-jersey2/pom.xml
@@ -38,7 +38,7 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>container-core</artifactId>
+ <artifactId>container-di</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/container-messagebus/pom.xml b/container-messagebus/pom.xml
index adaf64a0a03..f98607015f9 100644
--- a/container-messagebus/pom.xml
+++ b/container-messagebus/pom.xml
@@ -60,6 +60,12 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-di</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>jdisc_core</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/dist/vespa.spec b/dist/vespa.spec
index bd7dcde21bd..3707d4afb9c 100644
--- a/dist/vespa.spec
+++ b/dist/vespa.spec
@@ -625,6 +625,7 @@ fi
%{_prefix}/lib/jars/aopalliance-repackaged-*.jar
%{_prefix}/lib/jars/bcpkix-jdk15on-*.jar
%{_prefix}/lib/jars/bcprov-jdk15on-*.jar
+%{_prefix}/lib/jars/component-jar-with-dependencies.jar
%{_prefix}/lib/jars/config-bundle-jar-with-dependencies.jar
%{_prefix}/lib/jars/configdefinitions-jar-with-dependencies.jar
%{_prefix}/lib/jars/configgen.jar
diff --git a/metrics-proxy/pom.xml b/metrics-proxy/pom.xml
index 83d9a3424db..928179a6124 100644
--- a/metrics-proxy/pom.xml
+++ b/metrics-proxy/pom.xml
@@ -65,6 +65,12 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-di</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<!-- Not directly used in this module, but needed to get Import-Packages for JDK packages it exports. -->
<groupId>com.yahoo.vespa</groupId>
<artifactId>jdisc_core</artifactId>
diff --git a/metrics/pom.xml b/metrics/pom.xml
index a021454a049..4121467985c 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -8,14 +8,45 @@
<version>7-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>metrics</artifactId>
<packaging>jar</packaging>
<version>7-SNAPSHOT</version>
<name>metrics</name>
+ <description></description>
<dependencies>
<dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>vespajlib</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-bundle</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>jdisc_core</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-di</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>com.yahoo.vespa</groupId>
- <artifactId>config-lib</artifactId>
+ <artifactId>container-core</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/pom.xml b/pom.xml
index 0a216034bc0..04c032f6ec0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,7 @@
<module>container-dependencies-enforcer</module>
<module>container-dependency-versions</module>
<module>container-dev</module>
+ <module>container-di</module>
<module>container-disc</module>
<module>container-documentapi</module>
<module>container-integration-test</module>
diff --git a/simplemetrics/pom.xml b/simplemetrics/pom.xml
index 3e27ee4ffa3..6ca02febefd 100644
--- a/simplemetrics/pom.xml
+++ b/simplemetrics/pom.xml
@@ -49,6 +49,12 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
+ <artifactId>container-di</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>container-core</artifactId>
<version>${project.version}</version>
<scope>provided</scope>