我编写了一个简单的Java类来生成Windows Calculator文件的哈希值.我在用Windows 7 Professional with SP1.我曾尝试Java 6.0.29和Java 7.0.03.有人能告诉我为什么我从Java与(很多!)外部实用程序和/或网站获得不同的哈希值?外部的所有东西都相互匹配,只有Java返回不同的结果.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.zip.CRC32;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Checksum
{
private static int size = 65536;
private static File calc = new File("C:/Windows/system32/calc.exe");
/*
C:\Windows\System32\calc.exe (verified via several different utilities)
----------------------------
CRC-32b = 8D8F5F8E
MD5 = 60B7C0FEAD45F2066E5B805A91F4F0FC
SHA-1 = 9018A7D6CDBE859A430E8794E73381F77C840BE0
SHA-256 = 80C10EE5F21F92F89CBC293A59D2FD4C01C7958AACAD15642558DB700943FA22
SHA-384 = 551186C804C17B4CCDA07FD5FE83A32B48B4D173DAC3262F16489029894FC008A501B50AB9B53158B429031B043043D2
SHA-512 = 68B9F9C00FC64DF946684CE81A72A2624F0FC07E07C0C8B3DB2FAE8C9C0415BD1B4A03AD7FFA96985AF0CC5E0410F6C5E29A30200EFFF21AB4B01369A3C59B58
Results …Run Code Online (Sandbox Code Playgroud) 我正在使用Gradle 1.3并让它适用于一个小项目.它完全按照我的要求创建.JAR文件.但是,当我使用distZip创建一个ZIP文件时,所有JAR文件都被包含在内.
我的build.gradle文件的内容:
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'application'
group = 'com.some.project'
version = '1.0.2.0'
description = 'Update Server'
mainClassName = 'com.some.project.updateserver.client.Client'
defaultTasks 'compileJava', 'jar'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
allprojects {
tasks.withType(Compile) {
options.debug = true
options.compilerArgs = ['-Xlint:all']
}
}
dependencies {
compile "$commonsCodecGroup:commons-codec:$commonsCodecVersion"
compile "$commonsConfigurationGroup:commons-configuration:$commonsConfigurationVersion"
compile "$commonsLangGroup:commons-lang:$commonsLangVersion"
compile "$commonsLoggingGroup:commons-logging:$commonsLoggingVersion"
compile "$cxfGroup:cxf-bundle-minimal:$cxfVersion"
compile "$cxfGroup:cxf-rt-databinding-jaxb:$cxfVersion"
compile "$cxfGroup:cxf-rt-frontend-jaxrs:$cxfVersion"
compile "$cxfGroup:cxf-rt-transports-common:$cxfVersion"
compile "$cxfGroup:cxf-rt-transports-http:$cxfVersion"
compile "$jacksonGroup:jackson-jaxrs:$jacksonVersion"
compile "$jmockitGroup:jmockit:$jmockitVersion"
compile "$logBackGroup:logback-classic:$logBackVersion"
compile "$logBackGroup:logback-core:$logBackVersion"
compile "$servletGroup:servlet-api:$servletVersion"
compile "$slf4jGroup:slf4j-api:$slf4jVersion"
compile "$springGroup:spring-aop:$springVersion"
compile "$springGroup:spring-asm:$springVersion" …Run Code Online (Sandbox Code Playgroud) 我不是在寻找如何让我的JAR可以运行,而是自我执行.我发现这篇文章:
http://en.newinstance.it/2012/04/17/self-executing-jar-files/
我按照列出的步骤,根据需要创建了我的文件.我以为我有它工作(因为它会运行),但我意识到它实际上并没有运行JAR文件(BAT文件中嵌入的文件)的正确版本,而是来自文件系统的文件.
当我从文件系统中删除JAR文件时,Java错误说它无法找到该文件.下面是我为我的小测试项目创建的"make"脚本.您需要替换自己的路径和Java文件.
任何人都可以得到一个有效的例子吗?我最终希望能够使用可以使用的带有嵌入式二进制文件的自包含批处理文件.
@echo off
cd /d D:\current\battle
javac -d classes src\RemoveFiles.java
pushd classes
echo Main-Class: RemoveFiles > MANIFEST.MF
jar -cvmf MANIFEST.MF ..\RemoveFiles.jar RemoveFiles*.class
popd
echo @java -jar RemoveFiles.jar %%^* > removeStub.bat
echo @exit /b >> removeStub.bat
copy removeStub.bat /b + RemoveFiles.jar /b RemoveFiles.bat /b
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助...