我正在尝试使用docker将我们的java web应用程序部署到aws弹性beanstalk,其想法是能够在本地运行容器以进行开发和测试,并最终使用git将其推送到生产环境.
我已经创建了一个安装了tomcat8和java8的基本映像,执行gradle构建的映像继承了这个基本映像,从而加快了构建过程.
一切都运行良好,除了使用docker构建的继承应用程序容器似乎不缓存gradle依赖项,它每次都下载它,包括gradlew.我们使用以下命令构建Web应用程序:
./gradlew war
有没有办法可以缓存文件,~/.gradle这会大大加快我的建立速度.
这不是beanstalk上的一个问题,但对于尝试在本地构建和运行的开发人员来说这是一个大问题,因为这需要花费很多时间,正如您可以想象的那样.
基本映像dockerfile:
FROM phusion/baseimage
EXPOSE 8080
RUN apt-get update
RUN add-apt-repository ppa:webupd8team/java
RUN apt-get update
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
RUN apt-get -y install oracle-java8-installer
RUN java -version
ENV TOMCAT_VERSION 8.0.9
RUN wget --quiet --no-cookies http://archive.apache.org/dist/tomcat/tomcat-8/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/catalina.tar.gz
# Unpack
RUN tar xzf /tmp/catalina.tar.gz -C /opt
RUN mv /opt/apache-tomcat-${TOMCAT_VERSION} /opt/tomcat
RUN ln -s /opt/tomcat/logs /var/log/tomcat
RUN rm /tmp/catalina.tar.gz
# Remove unneeded apps
RUN rm -rf /opt/tomcat/webapps/examples
RUN …Run Code Online (Sandbox Code Playgroud) 我们使用slf4j和logback,当从命令行运行时,它仍然按预期工作,但在intellij中它是不同的.
在intellij中使用gradle运行junit测试,日志输出采用以下xml格式:
<ijLog><event type='afterSuite'><ijLogEol/>
<test id='root' parentId=''><ijLogEol/>
<descriptor name='Test Run' className='' /><ijLogEol/>
<result resultType='SUCCESS' startTime='1427264227574' endTime='1427264315052'><ijLogEol/>
<failureType>error</failureType><ijLogEol/>
</result><ijLogEol/>
</test><ijLogEol/>
</event></ijLog>
Run Code Online (Sandbox Code Playgroud)
我不希望IDE改变任何东西,只需使用我们提供的日志记录.这种用法很好,但自14.1以来我就遇到了这个问题.
使用Android工作室版本0.1.3和android gradle插件的0.4.2版本.我注意到它没有为我的任何依赖项提供源代码.我之前在eclipse上使用了第三方android插件,并且通常使用maven你也可以配置它来执行此操作.任何人都知道如何启用Android插件或Android工作室来获取工件的源和javadoc?
我遇到的另一个问题是我为这样的提供范围创建了一个配置
configurations {
provided
}
android.applicationVariants.each { variant ->
variant.javaCompile.classpath += configurations.provided
}
Run Code Online (Sandbox Code Playgroud)
哪个在gradle中完美运行,但android studio不会将其添加到其类路径中.有谁知道怎么解决这个问题?我试过像这样的想法gradle插件
idea {
module {
downloadJavadoc = true
downloadSources = true
scopes.PROVIDED.plus += configurations.provided
}
}
Run Code Online (Sandbox Code Playgroud)
但是在尝试修改范围时没有java插件它不起作用.此外,下载javadoc和源代码的设置也不起作用
我真的很失望android工作室和新的gradle构建系统如何组合在一起,真的想切换但是按照这个速度它只是不现实
我似乎遇到的问题是我似乎无法将lombok排除在apk之外.我尝试通过创建这样的提供配置来实现:
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
Run Code Online (Sandbox Code Playgroud)
然后像这样添加依赖项:
dependencies {
provided ‘org.projectlombok:lombok:0.11.8?
}
Run Code Online (Sandbox Code Playgroud)
但我仍然收到这个错误:
Error: duplicate files during packaging of APK <myapp>.apk
Path in archive: LICENSE
Origin 1: /<home>/.gradle/caches/artifacts-24/filestore/org.projectlombok/lombok/0.11.8/jar/e43ce2be16d8990568a4182c0bf996ad3ff0ba42/lombok-0.11.8.jar
Origin 2: /<home>/.gradle/caches/artifacts-24/filestore/org.sonatype.sisu.inject/cglib/2.2.1-v20090111/jar/7ce5e983fd0e6c78346f4c9cbfa39d83049dda2/cglib-2.2.1-v20090111.jar
:packageRelease FAILED
Run Code Online (Sandbox Code Playgroud)
我尝试过使用lombok-api.jar,然后在执行dex时会导致一些关于AccessLevel注释的问题.
这表明它包括lombok jar文件到apk.这不应该发生,有什么建议吗?