fixing gradle configuration and propagating it to the extension
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c1358ae7 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c1358ae7 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c1358ae7 Branch: refs/heads/master Commit: c1358ae7337bc8e076c1eeba0b821e73ddf3a027 Parents: d4b4166 Author: Romain manni-Bucau <rmannibu...@gmail.com> Authored: Mon Aug 29 09:31:30 2016 +0200 Committer: Romain manni-Bucau <rmannibu...@gmail.com> Committed: Mon Aug 29 09:31:30 2016 +0200 ---------------------------------------------------------------------- .../gradle/embedded/TomEEEmbeddedExtension.java | 322 ++++++++++++++++++- .../gradle/embedded/TomEEEmbeddedPlugin.java | 63 +++- .../gradle/embedded/TomEEEmbeddedTask.java | 48 ++- 3 files changed, 401 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/c1358ae7/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java ---------------------------------------------------------------------- diff --git a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java index d27609f..809667b 100644 --- a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java +++ b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedExtension.java @@ -16,17 +16,55 @@ */ package org.apache.tomee.gradle.embedded; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; +import java.io.File; +import java.util.Collection; +import java.util.List; +import java.util.Map; public class TomEEEmbeddedExtension { public static final String NAME = "tomee-embedded"; + public static final String ALIAS = "tomeeembedded"; // easier in build.gradle cause no iphen + // specific to the extension private boolean skipDefaultRepository = false; private String tomeeVersion; - public boolean isSkipDefaultRepository() { + // shared with the task + private Integer httpPort; + private Integer httpsPort; + private Integer ajpPort; + private Integer stopPort; + private String host; + private String keystoreFile; + private String keystorePass; + private String keystoreType; + private String clientAuth; + private String keyAlias; + private String sslProtocol; + private File serverXml; + private Boolean singleClassloader; + private Boolean ssl; + private Boolean withEjbRemote; + private Boolean quickSession; + private Boolean skipHttp; + private Collection<String> applicationScopes; + private Collection<String> classloaderFilteredPackages; + private Boolean webResourceCached; + private String context; + private Map<String, String> containerProperties; + private Boolean keepServerXmlAsThis; + private Map<String, String> users; + private Map<String, String> roles; + private Boolean forceJspDevelopment; + private String inlinedServerXml; + private String inlinedTomEEXml; + private File workDir; + private List<File> modules; + private File docBase; + private String dir; + private String conf; + + public Boolean isSkipDefaultRepository() { return skipDefaultRepository; } @@ -35,22 +73,274 @@ public class TomEEEmbeddedExtension { } public String getTomeeVersion() { - if (tomeeVersion == null) { - tomeeVersion = "7.0.0-M3"; - try { - try (final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/maven/org.apache.tomee.gradle/tomee-embedded/pom.properties")) { - final Properties p = new Properties(); - p.load(is); - tomeeVersion = p.getProperty("version", tomeeVersion); - } - } catch (IOException e) { - // no-op - } - } return tomeeVersion; } public void setTomeeVersion(final String tomeeVersion) { this.tomeeVersion = tomeeVersion; } + + public Integer getHttpPort() { + return httpPort; + } + + public void setHttpPort(final Integer httpPort) { + this.httpPort = httpPort; + } + + public Integer getHttpsPort() { + return httpsPort; + } + + public void setHttpsPort(final Integer httpsPort) { + this.httpsPort = httpsPort; + } + + public Integer getAjpPort() { + return ajpPort; + } + + public void setAjpPort(final Integer ajpPort) { + this.ajpPort = ajpPort; + } + + public Integer getStopPort() { + return stopPort; + } + + public void setStopPort(final Integer stopPort) { + this.stopPort = stopPort; + } + + public String getHost() { + return host; + } + + public void setHost(final String host) { + this.host = host; + } + + public String getKeystoreFile() { + return keystoreFile; + } + + public void setKeystoreFile(final String keystoreFile) { + this.keystoreFile = keystoreFile; + } + + public String getKeystorePass() { + return keystorePass; + } + + public void setKeystorePass(final String keystorePass) { + this.keystorePass = keystorePass; + } + + public String getKeystoreType() { + return keystoreType; + } + + public void setKeystoreType(final String keystoreType) { + this.keystoreType = keystoreType; + } + + public String getClientAuth() { + return clientAuth; + } + + public void setClientAuth(final String clientAuth) { + this.clientAuth = clientAuth; + } + + public String getKeyAlias() { + return keyAlias; + } + + public void setKeyAlias(final String keyAlias) { + this.keyAlias = keyAlias; + } + + public String getSslProtocol() { + return sslProtocol; + } + + public void setSslProtocol(final String sslProtocol) { + this.sslProtocol = sslProtocol; + } + + public File getServerXml() { + return serverXml; + } + + public void setServerXml(final File serverXml) { + this.serverXml = serverXml; + } + + public Boolean getSingleClassloader() { + return singleClassloader; + } + + public void setSingleClassloader(final Boolean singleClassloader) { + this.singleClassloader = singleClassloader; + } + + public Boolean getSsl() { + return ssl; + } + + public void setSsl(final Boolean ssl) { + this.ssl = ssl; + } + + public Boolean getWithEjbRemote() { + return withEjbRemote; + } + + public void setWithEjbRemote(final Boolean withEjbRemote) { + this.withEjbRemote = withEjbRemote; + } + + public Boolean getQuickSession() { + return quickSession; + } + + public void setQuickSession(final Boolean quickSession) { + this.quickSession = quickSession; + } + + public Boolean getSkipHttp() { + return skipHttp; + } + + public void setSkipHttp(final Boolean skipHttp) { + this.skipHttp = skipHttp; + } + + public Collection<String> getApplicationScopes() { + return applicationScopes; + } + + public void setApplicationScopes(final Collection<String> applicationScopes) { + this.applicationScopes = applicationScopes; + } + + public Collection<String> getClassloaderFilteredPackages() { + return classloaderFilteredPackages; + } + + public void setClassloaderFilteredPackages(final Collection<String> classloaderFilteredPackages) { + this.classloaderFilteredPackages = classloaderFilteredPackages; + } + + public Boolean getWebResourceCached() { + return webResourceCached; + } + + public void setWebResourceCached(final Boolean webResourceCached) { + this.webResourceCached = webResourceCached; + } + + public String getContext() { + return context; + } + + public void setContext(final String context) { + this.context = context; + } + + public Map<String, String> getContainerProperties() { + return containerProperties; + } + + public void setContainerProperties(final Map<String, String> containerProperties) { + this.containerProperties = containerProperties; + } + + public Boolean getKeepServerXmlAsThis() { + return keepServerXmlAsThis; + } + + public void setKeepServerXmlAsThis(final Boolean keepServerXmlAsThis) { + this.keepServerXmlAsThis = keepServerXmlAsThis; + } + + public Map<String, String> getUsers() { + return users; + } + + public void setUsers(final Map<String, String> users) { + this.users = users; + } + + public Map<String, String> getRoles() { + return roles; + } + + public void setRoles(final Map<String, String> roles) { + this.roles = roles; + } + + public Boolean getForceJspDevelopment() { + return forceJspDevelopment; + } + + public void setForceJspDevelopment(final Boolean forceJspDevelopment) { + this.forceJspDevelopment = forceJspDevelopment; + } + + public String getInlinedServerXml() { + return inlinedServerXml; + } + + public void setInlinedServerXml(final String inlinedServerXml) { + this.inlinedServerXml = inlinedServerXml; + } + + public String getInlinedTomEEXml() { + return inlinedTomEEXml; + } + + public void setInlinedTomEEXml(final String inlinedTomEEXml) { + this.inlinedTomEEXml = inlinedTomEEXml; + } + + public File getWorkDir() { + return workDir; + } + + public void setWorkDir(final File workDir) { + this.workDir = workDir; + } + + public List<File> getModules() { + return modules; + } + + public void setModules(final List<File> modules) { + this.modules = modules; + } + + public File getDocBase() { + return docBase; + } + + public void setDocBase(final File docBase) { + this.docBase = docBase; + } + + public String getDir() { + return dir; + } + + public void setDir(final String dir) { + this.dir = dir; + } + + public String getConf() { + return conf; + } + + public void setConf(final String conf) { + this.conf = conf; + } } http://git-wip-us.apache.org/repos/asf/tomee/blob/c1358ae7/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java ---------------------------------------------------------------------- diff --git a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java index 90d9d0d..671dfa1 100644 --- a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java +++ b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedPlugin.java @@ -22,36 +22,82 @@ import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.DependencySet; import org.gradle.api.artifacts.ResolvableDependencies; +import org.gradle.api.artifacts.UnknownConfigurationException; import org.gradle.api.artifacts.dsl.DependencyHandler; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; +import java.util.List; +import java.util.Properties; + +import static java.util.Arrays.asList; /** - * Custom dependencies can be added using the scope "tomee-embedded". + * Custom dependencies can be added using the scope "tomee-embedded" or "tomeeembedded". */ public class TomEEEmbeddedPlugin implements Plugin<Project> { @Override public void apply(final Project project) { - project.getExtensions().create(TomEEEmbeddedExtension.NAME, TomEEEmbeddedExtension.class); + final List<String> extensions = asList(TomEEEmbeddedExtension.NAME, TomEEEmbeddedExtension.ALIAS); + for (final String name : extensions) { + project.getExtensions().create(name, TomEEEmbeddedExtension.class); + } project.afterEvaluate(new Action<Project>() { @Override public void execute(final Project actionProject) { - final TomEEEmbeddedExtension extension = actionProject.getExtensions().findByType(TomEEEmbeddedExtension.class); - if (!extension.isSkipDefaultRepository()) { - actionProject.getRepositories().mavenCentral(); + for (final String name : extensions) { + final TomEEEmbeddedExtension extension = TomEEEmbeddedExtension.class.cast(actionProject.getExtensions().findByName(name)); + if (extension == null) { + return; + } + if (extension.isSkipDefaultRepository() != null && !extension.isSkipDefaultRepository()) { + actionProject.getRepositories().mavenCentral(); + return; + } } + actionProject.getRepositories().mavenCentral(); } }); - final Configuration configuration = project.getConfigurations().maybeCreate(TomEEEmbeddedExtension.NAME); + String configName = TomEEEmbeddedExtension.ALIAS; + try { + project.getConfigurations().getByName(configName); + } catch (final UnknownConfigurationException uce) { + configName = TomEEEmbeddedExtension.NAME; + } + + final Configuration configuration = project.getConfigurations().maybeCreate(configName); configuration.getIncoming().beforeResolve(new Action<ResolvableDependencies>() { @Override public void execute(final ResolvableDependencies resolvableDependencies) { + String tomeeVersion = null; + for (final String name : extensions) { + final TomEEEmbeddedExtension extension = TomEEEmbeddedExtension.class.cast(project.getExtensions().findByName(name)); + if (extension == null) { + return; + } + tomeeVersion = extension.getTomeeVersion(); + if (tomeeVersion != null) { + break; + } + } + if (tomeeVersion == null) { + try { + try (final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/maven/org.apache.tomee.gradle/tomee-embedded/pom.properties")) { + final Properties p = new Properties(); + p.load(is); + tomeeVersion = p.getProperty("version"); + } + } catch (final IOException e) { + tomeeVersion = "7.0.2"; // we should never be there + } + } + final DependencyHandler dependencyHandler = project.getDependencies(); final DependencySet dependencies = configuration.getDependencies(); - dependencies.add(dependencyHandler.create("org.apache.tomee:tomee-embedded:" + - project.getExtensions().findByType(TomEEEmbeddedExtension.class).getTomeeVersion())); + dependencies.add(dependencyHandler.create("org.apache.tomee:tomee-embedded:" + tomeeVersion)); } }); @@ -60,6 +106,5 @@ public class TomEEEmbeddedPlugin implements Plugin<Project> { put("group", "Embedded Application Server"); put("description", "Start an embedded Apache TomEE server deploying application classpath"); }}, TomEEEmbeddedExtension.NAME); - TomEEEmbeddedTask.class.cast(project.getTasks().findByName(TomEEEmbeddedExtension.NAME)).setClasspath(configuration); } } http://git-wip-us.apache.org/repos/asf/tomee/blob/c1358ae7/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java ---------------------------------------------------------------------- diff --git a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java index bf06e0b..b3ce50d 100644 --- a/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java +++ b/gradle/gradle-tomee-embedded/src/main/java/org/apache/tomee/gradle/embedded/TomEEEmbeddedTask.java @@ -21,6 +21,7 @@ import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.UnknownConfigurationException; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.TaskAction; @@ -206,10 +207,13 @@ public class TomEEEmbeddedTask extends DefaultTask { private void fixConfig() { final Project project = getProject(); - // final TomEEEmbeddedExtension extension = TomEEEmbeddedExtension.class.cast(project.findProject(TomEEEmbeddedExtension.NAME)); - + // defaults if (classpath == null) { - classpath = project.getConfigurations().getByName(TomEEEmbeddedExtension.NAME); + try { + classpath.add(project.getConfigurations().getByName(TomEEEmbeddedExtension.ALIAS).fileCollection()); + } catch (final UnknownConfigurationException uce) { + classpath = project.getConfigurations().getByName(TomEEEmbeddedExtension.NAME); + } } if (docBase == null) { @@ -227,6 +231,32 @@ public class TomEEEmbeddedTask extends DefaultTask { modules = new ArrayList<>(singletonList(main)); } } + + // extension override + for (final String name : asList(TomEEEmbeddedExtension.NAME, TomEEEmbeddedExtension.ALIAS)) { + final TomEEEmbeddedExtension extension = TomEEEmbeddedExtension.class.cast(project.getExtensions().findByName(name)); + if (extension != null) { + for (final Field f : TomEEEmbeddedTask.class.getDeclaredFields()) { + if (f.isAnnotationPresent(Input.class)) { + try { + final Field extField = TomEEEmbeddedExtension.class.getDeclaredField(f.getName()); + if (!extField.isAccessible()) { + extField.setAccessible(true); + } + final Object val = extField.get(extension); + if (val != null) { + if (!f.isAccessible()) { + f.setAccessible(true); + } + f.set(this, val); + } + } catch (final IllegalAccessException | NoSuchFieldException e) { + getLogger().warn("No field " + f.getName() + " in " + extension, e); + } + } + } + } + } } private void doRun() { @@ -344,14 +374,18 @@ public class TomEEEmbeddedTask extends DefaultTask { private Object getConfig(final Class<?> configClass) throws Exception { final Object config = configClass.newInstance(); - for (final Field field : getClass().getDeclaredFields()) { + for (final Field field : TomEEEmbeddedTask.class.getDeclaredFields()) { try { - final Field configField = Configuration.class.getDeclaredField(field.getName()); - field.setAccessible(true); - configField.setAccessible(true); + final Field configField = configClass.getDeclaredField(field.getName()); + if (!field.isAccessible()) { + field.setAccessible(true); + } final Object value = field.get(this); if (value != null) { + if (!configField.isAccessible()) { + configField.setAccessible(true); + } configField.set(config, value); getLogger().debug("using " + field.getName() + " = " + value); }