我正在使用 Maven 来构建一个特定的项目,并且在 POM 中,我正在使用 maven shade 插件构建主要工件的 3 个不同变体(我正在创建具有各种包含日志框架组合的 uber jar)。阴影插件使用替代工件 ID 及其各自的依赖减少的 poms 创建 jar。
我现在面临的挑战是如何将这些新工件部署到我的远程存储库。我正在使用 maven install 插件将它们安装到我的本地 repo,但是 maven deploy 插件需要显式配置存储库 URL。我想要发生的是插件采用默认部署使用的任何远程存储库,无论是快照或发布存储库还是我通过命令行传入的另一个存储库 URL。我希望找到一些像 ${project.remoterepo.url} 这样的 maven 属性,它等同于已解决的 repo。当部署目标已经这样做时,必须显式配置远程 URL 似乎很愚蠢。
任何建议表示赞赏。谢谢!
如何使用Java8 Supplier接口重写此工厂方法以提供正确的类型化实例?
我有一个扩展Map的简单界面:
public interface Thingy<K, V> extends Map<K, V> {}
Run Code Online (Sandbox Code Playgroud)
然后我有一个ThingyFactory类,其中包含Thingy所有实现类名的列表:
public final class ThingyFactory {
Map<String, Class<Thingy<?, ?>>> thingyclasses = new ConcurrentHashMap<>();
.....
@SuppressWarnings("unchecked")
public <K, V> Thingy<K, V> getInstance(String classname) throws ThingyException {
Thingy<K, V> thingy;
try {
thingy = (Thingy<K, V>) thingyclasses.get(classname).newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new ThingyException("Something bad happened: ", e.toString());
}
return thingy;
}
}
Run Code Online (Sandbox Code Playgroud)
我很确定我能够优雅地完成这项任务,并且没有使用供应商界面的SuppressWarnings和类加载器,但我似乎无法使模式非常正确.任何指导赞赏!
我有一个包含多个 Web 应用程序的网站,这些应用程序依赖于最终用户使用他们的 x509 客户端证书进行身份验证。我们观察到,同一个证书在由 .Net 应用程序处理时显示的主题 DN 与由 Java 应用程序处理时不同的主题 DN,当 DN 包含电子邮件地址属性时。
在 .Net 中,我看到服务器变量 CERT_SUBJECT 是这样的:
C=US, S=Delaware, L=Wilmington, O=IDFC Dev, OU=Test, CN=Richard Sand, E=rsand@idfconnect.lan
Run Code Online (Sandbox Code Playgroud)
在 Java 中,当我探索同一个证书(同一个浏览器会话)的 x509 证书对象时,主题是:
EMAILADDRESS=rsand@idfconnect.lan, CN=Richard Sand, OU=Test, O=IDFC Dev, L=Wilmington, ST=Delaware, C=US
Run Code Online (Sandbox Code Playgroud)
忽略属性的颠倒顺序(这是一个已知的现象),我们遇到的问题是,在 Java 中,电子邮件地址属性是EMAILADDRESS而在 .Net 中,相同的属性显示为E。
进一步挖掘,OpenSSL 显示了以下输出:
openssl.exe pkcs12 -in my.pfx -info
subject=/C=US/ST=Delaware/L=Wilmington/O=IDFC Dev/OU=Test/CN=Richard Sand/emailAddress=rsand@sidfconnect.lan
Run Code Online (Sandbox Code Playgroud)
而当我在 IE 或 Firefox 证书存储中查看相同的证书时,它们显示 E=,例如:
E = rsand@idfconnect.lan
CN = Richard Sand
OU = Test
O = IDFC …Run Code Online (Sandbox Code Playgroud) 我需要一种非常快速的机制,通过Hashtable中的条目以随机顺序进行迭代.表中的条目数通常约为10,永远不会超过20.目前我正在执行以下代码,通过选择16个随机,独特的双打并对其进行排序来随机化键的顺序,但我正在思考它不是最有效的解决方案:
TreeMap<Double, String> seeds = new TreeMap<Double, String>();
// These go in random order
Enumeration<String> keys = content.keys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
Double seedKey = new Double(Math.random());
while (seeds.get(seedKey) != null)
seedKey = new Double(Math.random());
seeds.put(seedKey, key);
}
// Now enumerate through the seeds
Set<Double> keys2 = seeds.keySet();
for (Double d : keys2) {
String key = seeds.get(d);
String value = content.get( key );
..................
Run Code Online (Sandbox Code Playgroud)
我给出的一个建议是将关键数组从0迭代到size-2,并将元素i与元素随机交换(从i + 1到size-1).它至少是线性的.期待建议!