小编mer*_*nst的帖子

手编辑一个罐子来改变包装名称

我有一个来自外部源的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)

java maven

26
推荐指数
1
解决办法
6817
查看次数

JSR305与JSR308(Java类型Anotations) - 哪个将成为标准?

似乎有两种不同的JSR用于注释.

JSR-305:软件缺陷检测的注释 (附加资源)
JSR-308:Java类型的注释 (附加资源)

两者似乎都面向静态代码分析.

你知道吗:

  • 哪两个都将在Java SE 7或Java EE 6中?
  • 每个JSR的"稳定"程度如何?
  • 那个人是否取代(或过时)另一个人?

java jsr305 java-7

18
推荐指数
2
解决办法
7095
查看次数

Java 8,Type Annotations和JSR 308

我安装了最后一个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

java annotations

11
推荐指数
2
解决办法
5146
查看次数

Gradle 的“maven”和“maven-publish”插件有什么区别?

我很困惑何时以及为什么应该选择其中之一。大多数功能都是通用的。

java gradle

11
推荐指数
2
解决办法
1579
查看次数

NPE注释场景和Java静态分析工具

以下是一些可以抛出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):

  • 01:[S]参数必须是非空的,但标记为可为空
  • 02:[F]未报告
  • 03:[F]没有报道

IntelliJ IDE 9.0.2(社区版):

  • 01:[S]方法调用text.toLowerCase()可能会产生java.lang.NullPointerException
  • 02:[S]方法调用text.toLowerCase()可能会产生java.lang.NullPointerException
  • 03:[S] …

java static-analysis nullpointerexception

7
推荐指数
1
解决办法
1309
查看次数

在Java 7中将访问修饰符放在注释后是否合法?还是Java 8?

这是通常的代码:

@Autowire
private Service service;
Run Code Online (Sandbox Code Playgroud)

但是使用Java 7,这也可以(并且更短):

private @Autowire Service service;
Run Code Online (Sandbox Code Playgroud)

这在Java 8中是否合法(具有相同的语义)?这是不好的编码练习吗?

java annotations java-8

7
推荐指数
2
解决办法
1045
查看次数

kinit:在获取初始凭据时客户端的凭据已被撤销

我的 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

7
推荐指数
1
解决办法
9万
查看次数

cron 作业的最大长度

我想每分钟执行一个命令(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)

ssh cron curl

7
推荐指数
1
解决办法
7217
查看次数

避免在 Ant 中重新构建先决条件

我有一个现有的 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 与之前存储的值不同的文件。可以随意设置 …

ant build-automation dependencies ivy

5
推荐指数
1
解决办法
1870
查看次数

如何定义 gradle 任务依赖项 - 输入输出或 dependentOn?

为了让增量构建支持在 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,而这对我来说现在已经过时了。你怎么认为?

build gradle incremental-build build.gradle

5
推荐指数
0
解决办法
3166
查看次数