默认情况下,Curl会添加内容类型和用户代理等标头.通常这是一件好事,但我正在尝试测试当这些标头丢失时我们的服务器做了什么.我的问题是内容类型标题.如果丢失,服务器会正确地假定用户发送了json.但是,curl实际上添加了缺少的标题,并错误地假定我发布的内容是application/x-www-form-urlencoded.它还发送/的Accept标头.我想这是很好的默认行为,但我基本上希望它不发送我没有指定的标头.那有选择吗?
curl -v -X POST 'https://domain.com' -d '{...}'
> User-Agent: curl/7.37.1
> Host: domain.com
> Accept: */*
> Content-Length: 299
> Content-Type: application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud) 我想尽快将我们的生产设置转移到openjdk 1.8.目前我们在centos 6.5上运行openjdk 1.7u55.
麻烦的是,我似乎无法直接从谷歌那里找到一个1.8的yum存储库.是否已在某处释放可用的rpm?如果是的话,在哪里?如果没有,那么可能会发生粗略的ETA(例如,centos 7或epel?).我可能要等几个星期但不会太久.
我至少能找到一些fedora软件包:https://apps.fedoraproject.org/packages/java-1.8.0-openjdk/builds
所以,这表明人们至少在研究这个问题,但我不知道这些软件包是否与centos一样稳定(或根本不工作).
为清楚起见,我知道这是jdk 1.8的早期阶段,并且我很清楚这些权衡.我不是在寻找有关如何从Oracle下载Oracle Java的构建说明或指令,因为它们缺少yum repo和许可证点击是令人讨厌的.
我正在尝试让maven下载所有依赖项(编译,测试,插件等),以便我可以避免让我们的dockerized构建浪费不必要的时间一遍又一遍地下载它们.
我们已经对我们的maven构建进行了docker化,以便我们可以从jenkins运行它,而不需要在jenkins机器上安装许多构建特定的依赖项(Java,redis,maven依赖项等).我们的构建依赖于增量docker构建,它只执行实际需要重新运行的步骤.
我们的主要构建是一个DockerFile,有几个步骤来安装jdk,maven等.然后它做了
COPY ./pom.xml /opt/inbot-api/pom.xml
RUN mvn dependency:copy-dependencies clean
这会将依赖项下载到本地maven存储库,然后清除目标目录.
然后我们将源树复制到映像并运行完整的构建.
COPY ./src /opt/inbot-api/src
RUN mvn -e clean install
一般的想法是,在一台干净的机器上,docker将执行所有RUN步骤,但在增量构建时,它只会重新运行需要重新运行的东西.在每个运行步骤之后,它存储中间图像.因此,如果pom文件没有更改,则无需重新运行依赖项提取步骤,因为它会产生完全相同的结果.因此,它会加载已缓存的中间映像,其中包含已下载的所有依赖项.这正是我们想要的.
我们的DockerFile还有很多不太重要的东西,但最终它产生了一个包含我们编译工件的docker文件,一个nginx配置以及我们可以部署到ECS的所有运行时依赖项.
这几乎可以工作,除了mvn clean install仍然下载每个构建的额外插件依赖项.因此,这些是复制依赖性步骤未涵盖的依赖项.
我的问题是,我如何RUN mvn dependency:copy-dependencies clean下载所有依赖项,包括插件依赖项.我已经看到人们实际上做了一个mvn verify clean而不是mvn dependency:copy-dependencies clean但在我们的情况下这有点慢.我想知道是否有更好的方法来做到这一点.
我很感激有关如何改进这一点的任何反馈.
更新
我现在做了
RUN mvn -B -T 4 dependency:copy-dependencies dependency:resolve-plugins dependency:go-offline clean
之后它还会下载更多东西mvn clean install.一个mvn -o clean install仍然失败,尽管dependency:go-offline.所以,这个插件似乎已经被打破了.
我有几个github java项目.其中一个我已经手动部署到sonatype的存储库,以便它在maven中心发布.
这是一个有点痛苦的过程,因为它似乎涉及太多的箍以跳过和大量的手动工作,我想自动化.所以我实际上已经停止这样做,因为这只是太多的工作.有大量的文档表明这是可能的,并且相当多一些表明它以某种方式涉及使用nexus-staging-maven-plugin做一些事情.不幸的是,所有这些文档都是(以典型的maven风格)跳过基本细节,这使我能够以简单的方式找出允许我自动将发布版本自动发布到sonatype存储库所需的最少步骤(即没有我手动批准的东西).
那么,什么是我的pom中需要出现的模糊(假设一个标准的不复杂的java项目),包括sonatype存储库的url,我发现的所有文档似乎都坚持localhost:8081就是它,并且是必需的maven咒语让它做一个发布(最好通过mvn发布插件),让它签署工件,并让它将生成的工件部署到sonatype,批准并准备好同步到maven central等.
因此,我正在寻找在红宝石世界中替换"宝石推"的maven,它可以在一个方便的单行中完成工作.这是一个简单的例子,给出了一个我认可的jar文件,如何让它以最少量的大惊小怪结束在maven中心.
我非常感谢已经设置的pom文件的一些例子,我可以复制和改编.
这是我工作的pom文件:
<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>
<groupId>com.jillesvangurp</groupId>
<artifactId>jsonj</artifactId>
<version>1.34-SNAPSHOT</version>
<name>JsonJ</name>
<description>A framework for working with json in Java the "proper" way. No mappings or model classes, it's all just lovely json, but in Java.</description>
<url>https://github.com/jillesvangurp/jsonj</url>
<licenses>
<license>
<name>MIT license</name>
<url>https://github.com/jillesvangurp/jsonj/blob/master/LICENSE</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<url>git://git@github.com:jillesvangurp/jsonj.git</url>
<connection>scm:git:git@github.com:jillesvangurp/jsonj.git</connection>
<developerConnection>scm:git:git@github.com:jillesvangurp/jsonj.git</developerConnection>
</scm>
<repositories>
<repository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories> …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的 ruby 应用程序供应商化,这样我就不必在服务器上手动安装任何 gem,并且可以在我们的 puppet 设置中将我的应用程序部署为 rpm。
这几乎有效,尽管我在 Gemfile 中添加了一个 require 'bundler',但没有任何将它添加到 vendor 目录的痕迹。所以,我的应用程序失败了
no such file to load -- bundler
Run Code Online (Sandbox Code Playgroud)
正是在加载我们的依赖项的时候。
require 'bundler'
Bundler.setup
Run Code Online (Sandbox Code Playgroud)
是否有一些明显的东西我在这里遗漏了,或者 bundler 实际上不能自己销售?
对于它的价值,我使用的是 jruby 1.7.8 并且有问题的应用程序具有以下 Gemfile:
# run with --local to use locally cached gems
# bundle install --full-index --without testing development
# vendorized setup for production
# bundle install --full-index --without testing development --deployment
source 'https://rubygems.org'
gem 'bundler'
gem 'sinatra'
gem 'sinatra-flash'
gem 'sinatra-contrib'
gem 'rack-parser', :require => 'rack/parser'
gem 'dynamic_attributes', :github …Run Code Online (Sandbox Code Playgroud) 我正在尝试与 aws athena 合作,对我们存储在 s3 中的 json 文件进行一些查询。因此,我设法创建了一个简单的模式,一切似乎都很好,直到我注意到我的一些文件没有被考虑在内。
文件的键是用户 ID,其中一些以 _ 开头。所有这些在雅典娜中都缺失了。它们存在于 s3 中。我能得到它们。它们与其他文件类似。但雅典娜没有看到他们。
显然它不喜欢在键的开头使用下划线。除了重命名所有文件之外,还有其他方法可以解决此问题吗?键中其他地方的下划线似乎不是问题。
我的架构(我通过删除字段来简化它):
CREATE EXTERNAL TABLE IF NOT EXISTS db.table (
`user_id` string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://xyz/myfiles/'
TBLPROPERTIES ('has_encrypted_data'='false');
我在github上有一个json库https://github.com/jillesvangurp/jsonj
这个库有一个基于json simple的解析器,它使用一个处理程序类来完成我在库中创建JsonObject,JsonArray和JsonPrimitive实例的所有工作.
我见过人们发布各种基准测试表明,jackson解析器在性能方面和它一样好,而json simple是较慢的选项之一.因此,为了看看我是否可以提升性能,我创建了一个替代解析器,它使用jackson流API并调用我用于原始解析器的相同处理程序.从功能的角度来看,这很好用,非常简单.
你可以在这里找到相关的类(JsonHandler,JsonParser和JsonParserNg):https://github.com/jillesvangurp/jsonj/tree/master/src/main/java/com/github/jsonj/tools
但是,我没有看到我运行的各种测试有任何改进.
所以,我的问题是:我是否应该看到任何改进,如果是这样,为什么?在我看来,至少在流API模式下,两个库都具有相似的性能.
我对其他人对此的体验非常感兴趣.
我正在尝试使用 Intellij Community Edition 2017.1 配置垃圾收集。使用以下/Users/jilles/Library/Preferences/IdeaIC2017.1/idea.vmoptions
# custom IntelliJ IDEA VM options
-XX:+UseG1GC
Run Code Online (Sandbox Code Playgroud)
它拒绝以此开始。上面的文件只有 1 个选项可以打开 G1。我只是删除了选项,直到我发现哪个选项导致了问题。经过一番挖掘,我至少设法让它在命令行上告诉我原因(这些东西永远不会出现在日志中):
~/Library/Preferences/IdeaIC2017.1 $ /Applications/IntelliJ\ IDEA\ CE.app/Contents/MacOS/idea
2017-04-14 13:41:52.697 idea[54761:1579154] allVms required 1.8*,1.8+
2017-04-14 13:41:52.701 idea[54761:1579163] fullFileName is: /Applications/IntelliJ IDEA CE.app/Contents/bin/idea.vmoptions
2017-04-14 13:41:52.701 idea[54761:1579163] fullFileName exists: /Applications/IntelliJ IDEA CE.app/Contents/bin/idea.vmoptions
2017-04-14 13:41:52.701 idea[54761:1579163] Value of IDEA_VM_OPTIONS is (null)
2017-04-14 13:41:52.701 idea[54761:1579163] Processing VMOptions file at /Users/jilles/Library/Preferences/IdeaIC2017.1/idea.vmoptions
2017-04-14 13:41:52.702 idea[54761:1579163] Done
Conflicting collector combinations in option list; please refer to the release notes for the combinations …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 jackson-kotlin 集成。大多数情况下它工作得很好,但我在反序列化泛型类型时遇到了麻烦。我尝试调整这个问题的答案:Jackson - Deserialize using generic class
// create an object mapper
val jsonFactory = JsonFactory()
jsonFactory.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false)
jsonFactory.configure(JsonParser.Feature.IGNORE_UNDEFINED, true)
val objectMapper = ObjectMapper(jsonFactory)
objectMapper.findAndRegisterModules()
objectMapper.propertyNamingStrategy = PropertyNamingStrategy.SnakeCaseStrategy()
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
// simple generic type
data class Inner(val meaningOfLife: Int)
data class Outer<T>(val inner: T)
val outer = Outer(Inner(42))
val serialized = objectMapper.stringify(outer, true)
println(serialized)
// deserializing does not work using:
// /sf/ask/816542611/
val parsed = objectMapper.readValue<Outer<Inner>>(serialized, objectMapper.typeFactory.constructParametricType(Outer::class.java,Inner::class.java))
Run Code Online (Sandbox Code Playgroud)
这会引发异常:
com.fasterxml.jackson.databind.JsonMappingException: Cannot deserialize Class io.inbot.common.ObjectMapperTest$should handle generics$Outer (of type local/anonymous) as …Run Code Online (Sandbox Code Playgroud)