diff --git a/build.gradle.kts b/build.gradle.kts index 32fbf342cf..daf8975c04 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -54,6 +54,12 @@ subprojects { create("releaseDep") { // contains all dependencies which has to be included into the release jar/zip isTransitive = false // avoid that the whole dependency tree is released } + create("bundle") { // contains all which are used by core + isTransitive = false // avoid that the whole dependency tree is released + } + create("bundleApi") { // contains all dependencies which are used by all java subprojects + isTransitive = false // avoid that the whole dependency tree is released + } } configure { @@ -110,6 +116,8 @@ subprojects { register("generateLib", Copy::class) { into("${project.projectDir}/lib") from(projectToConf.configurations.getByName("releaseDep")) + from(projectToConf.configurations.getByName("bundle")) + from(projectToConf.configurations.getByName("bundleApi")) } val aggregateTestResults: String? by project @@ -139,6 +147,8 @@ subprojects { // Bridge that routes log4j calls to log4j2 val log4j2Bridge = "org.apache.logging.log4j:log4j-1.2-api:$log4j2VersionNr" + projectToConf.extra["commons-lang3"] = "org.apache.commons:commons-lang3:3.8.1" + projectToConf.extra["junitVersion"] = junitVersion projectToConf.extra["log4j2ApiVersion"] = log4j2Api projectToConf.extra["log4j2CoreVersion"] = log4j2Core diff --git a/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipseExtension.java b/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipseExtension.java index e6f75195c3..7ac7b489a0 100644 --- a/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipseExtension.java +++ b/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipseExtension.java @@ -30,6 +30,7 @@ public class SarosEclipseExtension { private boolean addDependencies = false; private boolean addPdeNature = false; private boolean createBundleJar = false; + private List configs = new ArrayList<>(); public File getManifest() { return manifest; @@ -106,4 +107,23 @@ public boolean isCreateBundleJar() { public void setCreateBundleJar(boolean createBundleJar) { this.createBundleJar = createBundleJar; } + + public void setConfigs(List configs) { + this.configs = configs; + } + + public List getConfigs() { + return configs; + } + + /** + * Get the list of (gradle) configurations or a given default if the list of configurations is + * empty. + * + * @param defaultConfigs The list of (gradle) configurations to be returned when an empty + * configurations-list is given. + */ + public List getConfigs(List defaultConfigs) { + return configs.isEmpty() ? defaultConfigs : configs; + } } diff --git a/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipsePlugin.java b/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipsePlugin.java index 7f7674b5eb..8f4b4ad4cb 100644 --- a/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipsePlugin.java +++ b/buildSrc/src/main/java/saros/gradle/eclipse/SarosEclipsePlugin.java @@ -1,5 +1,7 @@ package saros.gradle.eclipse; +import java.util.Arrays; +import java.util.List; import org.gradle.api.GradleException; import org.gradle.api.Plugin; import org.gradle.api.Project; @@ -16,6 +18,7 @@ public class SarosEclipsePlugin implements Plugin { private static final String EXTENSION_NAME = "sarosEclipse"; private static final String PLUGIN_VERSION_CHANGE_TASK_NAME = "changeEclipsePluginVersion"; + private static final List DEFAULT_CONFIG_NAMES = Arrays.asList("releaseDep"); /** * Method which is called when the plugin is integrated in a gradle build (e.g. with {@code apply @@ -70,7 +73,8 @@ private void configureEclipseAfterEvaluate(Project p, SarosEclipseExtension e) { if (e.isCreateBundleJar()) { methodRequiresManifest("create bundle jar", e); - new JarConfigurator(p).createBundleJar(e.getManifest()); + List jarConfigs = e.getConfigs(DEFAULT_CONFIG_NAMES); + new JarConfigurator(p, jarConfigs).createBundleJar(e.getManifest()); } if (e.isAddDependencies()) { diff --git a/buildSrc/src/main/java/saros/gradle/eclipse/configurator/JarConfigurator.java b/buildSrc/src/main/java/saros/gradle/eclipse/configurator/JarConfigurator.java index c1f5585e82..39721df2de 100644 --- a/buildSrc/src/main/java/saros/gradle/eclipse/configurator/JarConfigurator.java +++ b/buildSrc/src/main/java/saros/gradle/eclipse/configurator/JarConfigurator.java @@ -1,6 +1,7 @@ package saros.gradle.eclipse.configurator; import java.io.File; +import java.util.List; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.file.CopySpec; @@ -14,13 +15,14 @@ public class JarConfigurator { private static final String JAVA_PLUGIN_ID = "java"; private static final String JAR_TASK_NAME = "jar"; - private static final String RELEASE_CONFIG_NAME = "releaseDep"; private static final String JAR_LIB_DESTINATION = "lib"; private Project project; + private final List configs; - public JarConfigurator(Project project) { + public JarConfigurator(Project project, List configs) { this.project = project; + this.configs = configs; project.getPluginManager().apply(JAVA_PLUGIN_ID); } @@ -33,8 +35,10 @@ public void createBundleJar(File manifestFile) { jarTask.manifest((Manifest mf) -> mf.from(manifestFile)); SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class); jarTask.from(sourceSets.getByName(JAVA_MAIN_SOURCE_SET_NAME).getOutput()); - jarTask.into( - JAR_LIB_DESTINATION, - (CopySpec cs) -> cs.from(project.getConfigurations().getByName(RELEASE_CONFIG_NAME))); + for (String jarConfig : this.configs) { + jarTask.into( + JAR_LIB_DESTINATION, + (CopySpec cs) -> cs.from(project.getConfigurations().getByName(jarConfig))); + } } } diff --git a/core/META-INF/MANIFEST.MF b/core/META-INF/MANIFEST.MF index 9cde0e8e76..3ccc7f8814 100644 --- a/core/META-INF/MANIFEST.MF +++ b/core/META-INF/MANIFEST.MF @@ -4,28 +4,7 @@ Bundle-Name: Saros Core Bundle-SymbolicName: saros.core Bundle-Version: 0.2.0 Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Export-Package: com.thoughtworks.xstream, - com.thoughtworks.xstream.annotations, - com.thoughtworks.xstream.converters, - com.thoughtworks.xstream.converters.basic, - com.thoughtworks.xstream.converters.collections, - com.thoughtworks.xstream.converters.enums, - com.thoughtworks.xstream.converters.extended, - com.thoughtworks.xstream.converters.javabean, - com.thoughtworks.xstream.converters.reflection, - com.thoughtworks.xstream.core, - com.thoughtworks.xstream.core.util, - com.thoughtworks.xstream.io, - com.thoughtworks.xstream.io.binary, - com.thoughtworks.xstream.io.copy, - com.thoughtworks.xstream.io.json, - com.thoughtworks.xstream.io.naming, - com.thoughtworks.xstream.io.path, - com.thoughtworks.xstream.io.xml, - com.thoughtworks.xstream.io.xml.xppdom, - com.thoughtworks.xstream.mapper, - com.thoughtworks.xstream.persistence, - saros, +Export-Package: saros, saros.account, saros.activities, saros.annotations, @@ -80,11 +59,6 @@ Export-Package: com.thoughtworks.xstream, saros.ui.util, saros.util, saros.versioning, - org.apache.commons.codec, - org.apache.commons.codec.binary, - org.apache.commons.codec.digest, - org.apache.commons.codec.language, - org.apache.commons.codec.net, org.apache.commons.io, org.apache.commons.io.comparator, org.apache.commons.io.filefilter, diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8821e37e7e..23f6416b6f 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,27 +1,38 @@ plugins { id("saros.gradle.eclipse.plugin") + `java-library` } val versionQualifier = ext.get("versionQualifier") as String +val commonsLang = ext.get("commons-lang3") as String val log4j2ApiVersion = ext.get("log4j2ApiVersion") as String val log4j2CoreVersion = ext.get("log4j2CoreVersion") as String val log4j2BridgeVersion = ext.get("log4j2BridgeVersion") as String configurations { + val bundle by getting {} + val bundleApi by getting {} + val api by getting { + extendsFrom(bundleApi) + } + val implementation by getting { + extendsFrom(bundle) + } // Defined in root build.gradle val testConfig by getting {} - val releaseDep by getting {} - // Default configuration - val compile by getting { - extendsFrom(releaseDep) + // populate releaseDep while it is still used by other projects + val releaseDep by getting { + extendsFrom(bundle, bundleApi) } + + // Default configuration val testCompile by getting { extendsFrom(testConfig) } val plain by creating { - extendsFrom(compile) + extendsFrom(implementation, api) } } @@ -30,29 +41,30 @@ sarosEclipse { isCreateBundleJar = true isAddPdeNature = true pluginVersionQualifier = versionQualifier + configs = listOf("bundle", "bundleApi") } dependencies { - releaseDep("commons-codec:commons-codec:1.3") - releaseDep("commons-io:commons-io:2.0.1") - releaseDep("org.apache.commons:commons-lang3:3.8.1") + bundle("commons-codec:commons-codec:1.3") + bundleApi("commons-io:commons-io:2.0.1") + bundleApi(commonsLang) - releaseDep("javax.jmdns:jmdns:3.4.1") - releaseDep("xpp3:xpp3:1.1.4c") - releaseDep("com.thoughtworks.xstream:xstream:1.4.10") - releaseDep("org.gnu.inet:libidn:1.15") + bundle("javax.jmdns:jmdns:3.4.1") + bundle("xpp3:xpp3:1.1.4c") + bundle("com.thoughtworks.xstream:xstream:1.4.10") + bundle("org.gnu.inet:libidn:1.15") - releaseDep(log4j2ApiVersion) - releaseDep(log4j2CoreVersion) - releaseDep(log4j2BridgeVersion) + bundleApi(log4j2ApiVersion) + bundleApi(log4j2CoreVersion) + bundleApi(log4j2BridgeVersion) // TODO: use real release. This version is a customized SNAPSHOT - releaseDep(files("libs/weupnp.jar")) + bundleApi(files("libs/weupnp.jar")) // Workaround until we updated to a newer smack version - releaseDep(files("libs/smack-3.4.1.jar")) - releaseDep(files("libs/smackx-3.4.1.jar")) + bundleApi(files("libs/smack-3.4.1.jar")) + bundleApi(files("libs/smackx-3.4.1.jar")) // Workaround until we can publish and use (without a user token) the repackaged jar in GitHub Packages - releaseDep(rootProject.files("libs/picocontainer-2.11.2-patched_relocated.jar")) + bundleApi(rootProject.files("libs/picocontainer-2.11.2-patched_relocated.jar")) } sourceSets {