我有一个来自外部源的jar文件.jar中的所有类都在com.xyz包中.
我想将所有类移到com.xyzold包中.
这是简单的解压缩jar,将xzy文件夹重命名为xyzold,并重新压缩它,还是我还需要修改每个类文件?
这是我的解决方案,使用Jar Jar Links
java -jar jarjar-1.4.jar process rules.txt google-collections-1.0.jar google-collections-old-1.0.jar
Run Code Online (Sandbox Code Playgroud)
这是我的rules.txt文件的内容:
rule com.google.** com.googleold.@1
Run Code Online (Sandbox Code Playgroud) 似乎有两种不同的JSR用于注释.
JSR-305:软件缺陷检测的注释 (附加资源)
JSR-308:Java类型的注释 (附加资源)
两者似乎都面向静态代码分析.
你知道吗:
我安装了最后一个JDK 8(b116),但我注意到我不能使用类型注释.例如,如果我写的话,阅读Java教程:
String str = null;
String myString = (@NonNull String) str;
Run Code Online (Sandbox Code Playgroud)
要么
TEST st = new @Interned TEST();
Run Code Online (Sandbox Code Playgroud)
编译器给我以下错误:
annotation type not applicable to this kind of declaration
Run Code Online (Sandbox Code Playgroud)
现在它有效.在使用类型注释之前,我们必须使用注释来注释注释@Target(ElementType.TYPE_USE).看看下面的评论!
我也不明白是否会在JDK中插入注释,如等NonNull,Interned或者我们是否必须下载Checker Framework
我很困惑何时以及为什么应该选择其中之一。大多数功能都是通用的。
以下是一些可以抛出NullPointerException的代码片段.
01:
public void m1(@Nullable String text) {
System.out.print(text.toLowerCase()); // <-- expect to be reported.
}
Run Code Online (Sandbox Code Playgroud)
02:
private boolean _closed = false;
public void m1(@Nullable String text) {
if(_closed)
return;
System.out.print(text.toLowerCase()); // <-- expect to be reported.
}
Run Code Online (Sandbox Code Playgroud)
03:
public void m1(@NotNull String text) {
System.out.print(text.toLowerCase());
}
public @Nullable String getText() {
return "Some text";
}
public void m2() {
m1(getText()); // <-- expect to be reported.
}
Run Code Online (Sandbox Code Playgroud)
不同的人可以访问不同的静态分析工具.收集信息,能够检测和报告问题的工具以及失败的信息会很好.另外,如果你有自己的风景,请发布它们.
在这里我的结果
FindBugs(1.3.9):
IntelliJ IDE 9.0.2(社区版):
这是通常的代码:
@Autowire
private Service service;
Run Code Online (Sandbox Code Playgroud)
但是使用Java 7,这也可以(并且更短):
private @Autowire Service service;
Run Code Online (Sandbox Code Playgroud)
这在Java 8中是否合法(具有相同的语义)?这是不好的编码练习吗?
我的 hdp 集群配置了带有 AD 的 kerberos。所有 HDP 服务帐户都生成了主体和密钥表,包括 Spark。
我知道服务帐户不会有密码并设置为过期。现在,在执行此操作时,kinit -kt spark.keytab -p spark-PRINCIPAL我收到以下错误(参见标题)。
我在 MIT 网站上读到,这种情况的发生是由于许多不成功的登录尝试或 KDC 中默认策略中设置的帐户到期。可以使用 kadmin 命令(例如kadmin:modprinciSpark/principal)解锁帐户,但我已与 AD 管理员进行了交叉检查。他说我们不使用 kdc 服务器来执行 kadmin 命令,而我们使用 AD,但他说使用 AD UI 检查时 Spark 帐户处于解锁状态。
我的问题:
AD中有没有解锁spark帐户的命令?
我厌倦了删除 Spark 服务并重新安装在我的集群中,这确实重新生成了新的密钥表或主体以避免 AD 撤销错误。查看是否有任何引发此错误的本地帐户。
AD 管理员向我提供了服务器详细信息和密码,并具有执行 ldap 搜索和删除命令的有限权限。我可以使用这些权限来解锁 Spark 吗?以及如何做到这一点?
hadoop kerberos active-directory hortonworks-data-platform apache-spark
我想每分钟执行一个命令(SSH)。该命令是一个 cURL bash,长度是 1625。当我将命令放入 crontabs 并保存时:
"/tmp/crontab.ijKPl1/crontab":51: command too long
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
Run Code Online (Sandbox Code Playgroud) 我有一个现有的 Ant 项目,希望通过避免重新构建已经是最新的组件来加快构建过程。
Ant 允许您指定一个目标依赖于另一个目标,但默认情况下,每个先决条件总是会重建,即使它已经是最新的。(这是 Ant 和 make 之间的一个关键区别。默认情况下,make 仅在需要时重新构建目标——也就是说,如果某些先决条件较新。)
<uptodate property="mytarget.uptodate"> // in set.mytarget.uptodate task
...
</uptodate>
<!-- The prerequisites are executed before the "unless" is checked. -->
<target name="mytarget" depends="set.mytarget.uptodate" unless="mytarget.uptodate">
...
</target>
Run Code Online (Sandbox Code Playgroud)
为了让 Ant 仅在必要时重新构建先决条件,Ant 中似乎有两种通用方法。
第一种方法是使用uptodate任务来设置属性。然后,您的任务可以测试该属性并仅在该属性已设置(未设置)时进行构建。
<uptodate property="mytarget.uptodate"> // in set.mytarget.uptodate task
...
</uptodate>
<!-- The prerequisites are executed before the "unless" is checked. -->
<target name="mytarget" depends="set.mytarget.uptodate" unless="mytarget.uptodate">
...
</target>
Run Code Online (Sandbox Code Playgroud)
第一种替代方法是使用outofdateant contrib 中的任务。更好的是它只是一个目标,没有定义单独的属性;相比之下,过时需要单独的目标来设置和测试属性。
<fileset>第二种方法是使用选择器创建一个<modified>
。它计算文件的 MD5 哈希值并选择 MD5 与之前存储的值不同的文件。可以随意设置 …
为了让增量构建支持在 gradle 中正确运行,需要在每个(自定义)任务中定义“输入”和“输出”。
这是一种非常简洁的 gradle 方法来检查任务是否可以因为它是最新的而被跳过。样本:
task myTaskA {
def someOutputDir = file("$buildDir/gen")
// define task outputs (input not required here)
outputs.dir someOutputDir
doLast{
// generate something into the defined output directory
new File(someOutputDir, "dummy.txt").text = "Gradle sample"
}
}
task myTaskB {
// Input of this task is dependent on the output of myTaskA
inputs.files myTaskA
doLast{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这非常好,另外好处是,我们不需要在任务“myTaskB”中声明显式依赖指令(dependsOn)。
dependsOn myTaskA
Run Code Online (Sandbox Code Playgroud)
该指令不是必需的,因为我们有由输入声明定义的隐式依赖项。
我认为在自定义任务中始终提供输入/输出定义以支持增量构建是一种很好的风格。
但是:这也意味着我们可以完全忽略 dependentOn。
SO:我们什么时候应该dependsOn选择inputs/outputs?
也许如果没有输入或输出。是的,但是还有其他可以想到的用例吗?我一直在使用dependsOn,而这对我来说现在已经过时了。你怎么认为?
java ×6
annotations ×2
gradle ×2
ant ×1
apache-spark ×1
build ×1
build.gradle ×1
cron ×1
curl ×1
dependencies ×1
hadoop ×1
ivy ×1
java-7 ×1
java-8 ×1
jsr305 ×1
kerberos ×1
maven ×1
ssh ×1