我正在构建一个Ionic3应用程序,我config.xml有一些数据,我希望能够根据我的环境进行更改(例如,我希望我的facebook app id具有不同的开发,分期和生产价值).
我实现了这个创建模板config.xml(文件是config.tpl.xml)和一个before_prepare cordova钩子,用正确的值替换模板中的变量并保存生成的内容config.xml.
所述cordova钩使用npm包es6-template-strings:
npm install es6-template-strings --save-dev
Run Code Online (Sandbox Code Playgroud)
钩子是:
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var compile = require('es6-template-strings/compile');
var resolveToString = require('es6-template-strings/resolve-to-string');
var ROOT_DIR = process.argv[2];
var FILES = {
SRC: "config.tpl.xml",
DEST: "config.xml"
};
var env = process.env.NODE_ENV || 'dev';
var envFile = 'src/environments/environment.' + env + '.json';
var srcFileFull = path.join(ROOT_DIR, FILES.SRC); …Run Code Online (Sandbox Code Playgroud) 我使用Java11和httpclient 4.5.11制作要求的API,到目前为止一切正常。但是一个多星期前付款https://api.moip.com.br开始出现间歇性错误(Connection reset)。
我知道他们需要 TLSv1.2 并且 Java11 支持它,而且错误是间歇性的(有时它起作用,有时不起作用)。我联系了他们,他们说他们迁移了他们的代码库,但他们处理请求的配置是相同的,我对此表示怀疑,但无论如何,考虑到他们处理多个组织的付款,我认为有一些东西我可以做些什么来避免这些错误。作为旁注,我可以毫无问题地向 PayPal、Stripe、Google Recaptcha 以及其他服务提出请求。
我如何创建连接:
try (CloseableHttpClient httpClient = createHttpClientBuilder().build()) {
HttpUriRequest httpMethod = createHttpUriRequest(request);
HttpResponse httpResponse = httpClient.execute(httpMethod);
SimpleHttpClientResponse response = createResponse(httpResponse);
return response;
} catch (Exception e) {
throw new HTTPException(request, e);
}
Run Code Online (Sandbox Code Playgroud)
以下是我如何创建连接管理器、客户端构建器和请求本身:
private static HttpClientBuilder createHttpClientBuilder() throws KeyManagementException, NoSuchAlgorithmException {
CookieStore httpCookieStore = new BasicCookieStore();
RequestConfig defaultRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
HttpClientBuilder builder = HttpClients.custom()
.setConnectionManager(connectionManager)
.setConnectionManagerShared(true)
.setDefaultCookieStore(httpCookieStore)
.setDefaultRequestConfig(defaultRequestConfig);
return builder;
}
private …Run Code Online (Sandbox Code Playgroud) 我有一个build.gradle创建 javaWAR文件的文件。该文件用于 Docker 多阶段构建的一个阶段,以生成我在生产、暂存等中使用的 Docker 映像(配置文件/机密在映像之外)。
但是在开发中,虽然大部分时间我使用普通构建来生成WAR文件(或分解的WAR),并且它工作正常,但有时我只想在我的项目中执行带有主类的单个java文件。
我实现了将以下内容添加到文件中:
task execFile(type: JavaExec) {
main = mainClass
classpath = sourceSets.main.runtimeClasspath
if (System.getProperty('debug', 'false') == 'true') {
jvmArgs "-Xdebug", "-agentlib:jdwp=transport=dt_socket,address=8788,server=y,suspend=y"
}
systemProperties System.getProperties()
}
Run Code Online (Sandbox Code Playgroud)
然后我可以执行文件传递系统属性:
gradle execFile -PmainClass=com.mysite.MyClass -Dsomeprop=somevalue
Run Code Online (Sandbox Code Playgroud)
如果我想调试我运行:
gradle execFile -PmainClass=com.mysite.MyClass -Dsomeprop=somevalue -Ddebug=true
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以执行(和调试)单个文件,这在开发过程中的某些情况下非常有用,但问题是即使我没有execFile明确运行,也会执行此代码。
这会在构建和生成 WAR 文件时导致错误,所以我正在做的是注释这些行,在运行单个文件时取消注释,并在运行文件后再次注释(当我记得时),然后再推送git repo(否则docker 构建过程以错误告终)。
这很糟糕,我知道。
根据我的理解,该代码在配置阶段运行,为了使代码在任务执行中运行,我可以将代码包含在doLast方法中(或使用简写<<):
为什么 gradle 在 gradle.build 中运行每个任务
但在这种情况下,我得到了错误No main …