java - 用于 Java 库的 GnuPG ant 构建问题/错误

标签 java ant cryptography gnupg

我正在使用 GnuPG Java API 来加密/解密文件。
用 Google 搜索并找到了一个 Java Wrapper GnuPG for Java , GPGME(GnuPG Made Easy,C 语言库) 的 Java 包装器。
官网也引用this作为 Java 包装器。
所以按照说明,设置 ant 并尝试运行 ant clean release
它正在抛出错误。 但是 maven 构建工作和 jar 文件也生成了。
运行 ant 时出现以下错误。

 C:\Users\user\Desktop\MFT\gnupg-for-java-master>ant clean release
Buildfile: C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml

clean-native:
     [exec] rm -f GnuPGContext.o GnuPGData.o GnuPGGenkeyResult.o GnuPGKey.o GnuPGSignature.o gpgmeutils.o *~
     [exec] rm -f C:\Users\user\Desktop\MFT\gnupg-for-java-master\build/gnupg-for-java.dll
     [exec] rm -f  com_freiheit_gnupg_GnuPGContext.h  com_freiheit_gnupg_GnuPGData.h  com_freiheit_gnupg_GnuPGGenkeyResult.h  com_freiheit_gnupg_GnuPG
Key.h  com_freiheit_gnupg_GnuPGSignature.h

clean:
   [delete] Deleting directory C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes

prepare:

compile-java:
    [mkdir] Created dir: C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes
    [javac] C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:21: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=l
ast; set to false for repeatable builds
    [javac] Compiling 8 source files to C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes

gen-jni-headers:

prepare:

compile-java:
    [javac] C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:21: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=l
ast; set to false for repeatable builds

generate-jni-headers:
     [exec] C:\Program Files (x86)/Java/jdk1.7.0_51/bin/javah -classpath C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes -jni  com.freih
eit.gnupg.GnuPGContext  com.freiheit.gnupg.GnuPGData  com.freiheit.gnupg.GnuPGGenkeyResult  com.freiheit.gnupg.GnuPGKey  com.freiheit.gnupg.GnuPGSigna
ture
     [exec] /bin/sh: -c: line 0: syntax error near unexpected token `('
     [exec] /bin/sh: -c: line 0: `C:\Program Files (x86)/Java/jdk1.7.0_51/bin/javah -classpath C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\c
lasses -jni  com.freiheit.gnupg.GnuPGContext  com.freiheit.gnupg.GnuPGData  com.freiheit.gnupg.GnuPGGenkeyResult  com.freiheit.gnupg.GnuPGKey  com.fre
iheit.gnupg.GnuPGSignature'
     [exec] make: *** [com_freiheit_gnupg_GnuPGContext.h] Error 2

BUILD FAILED
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:71: The following error occurred while executing this line:
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:63: exec returned: 2

Total time: 4 seconds

更新

我更改了 GNUmakefile 中的 Java home,现在它抛出不同的错误。似乎 c library not found 并且这个 API 是为 Unix 系统编写的 阅读错误消息似乎。缺少什么 C 库?

    generate-jni-headers:
     [exec] C:\Java\jdk1.7.0_75/bin/javah -classpath C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes -jni  com.freiheit.gnupg.GnuPGConte
xt  com.freiheit.gnupg.GnuPGData  com.freiheit.gnupg.GnuPGGenkeyResult  com.freiheit.gnupg.GnuPGKey  com.freiheit.gnupg.GnuPGSignature

gen-jni-library:

recompile-c-code:
     [exec] mingw32-gcc -g -Werror -Wall -Wno-deprecated-declarations -fPIC -mms-bitfields -Wl,--add-stdcall-alias  -D_REENTRANT -D_THREAD_SAFE -D_FIL
E_OFFSET_BITS=64 -DLARGEFILE_SOURCE=1 -I"C:\Java\jdk1.7.0_75/include" -I"C:\Java\jdk1.7.0_75/include/win32" -I"C:\Program Files (x86)/GNU/GnuPG/includ
e" -c GnuPGContext.c
     [exec] /bin/sh: mingw32-gcc: command not found
     [exec] make: *** [GnuPGContext.o] Error 127

BUILD FAILED
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:82: The following error occurred while executing this line:
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:75: exec returned: 2

Total time: 7 seconds

谁能帮我解决这个问题? 我哪里出错了?

最佳答案

我重写了我的答案,因为我想创建一个完整的指南。

将 GnuPG 和 MinGW-Get 安装到一个没有空格的目录中。 使用 !!!GUI!!! 安装 MinGW 后,打开 mingw-get,安装这些组件:
mingw32-gcc(全部勾选) mingw32-libz(dll最重要)

Download并安装 MSYS ,这是一个命令行工具包,用于运行诸如 make 之类的命令。

然后将 c:\msys\1.0\bin\(或您安装它的任何位置)放在 PATH 变量的开头。重新启动 eclipse 或打开一个新的 cmd,它应该可以工作。

在 build.xml 中: 第 21 行:

classpath="lib/junit-4.4.jar" added.(and the junit is in the lib dir)

在 GNUmakefile 中: 第 9 行:

ALL_CFLAGS :=  -Wall -Wno-deprecated-declarations -fPIC

第 10 行:

ALL_CPPFLAGS = -D_REENTRANT -D_THREAD_SAFE -D_FILE_OFFSET_BITS=64 -DLARGEFILE_SOURCE=1 \
        -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include" -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include/win32"

第 21-27 行:

  JAVA_HOME := c:/WORK/x/gnu/jdk/jdk1.8.0_25
  ALL_CFLAGS +=  -mms-bitfields -Wl,--add-stdcall-alias
  ALL_CPPFLAGS += -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include/win32" -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include" -I"c:/GNU/GnuPG/include"
  ALL_LDFLAGS :=  -s -shared -Wl,--enable-auto-import
  ALL_LIBS := -L"c:/GNU/GnuPG" -lgpgme-11
  GNUPG_LIB := $(BUILD_DIR)/gnupg-for-java.dll

第 63 行:

$(CC) $(DEBUG) $(ALL_CFLAGS) $(ALL_LDFLAGS) $^ -o "$(BUILD_DIR)/gnupg-for-java.dll" $(ALL_LIBS)

总结:这对我有用,并将 jar 和 dll 文件输出到构建目录。我的工作目录是 c:/WORK/x 所以替换它不同的路径。不要在任何地方使用“程序文件”,如您所见,我必须从那里复制所有内容。

关于java - 用于 Java 库的 GnuPG ant 构建问题/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299143/

相关文章:

java - tomcat + Jenkins + Java EE 源 = 编译失败

cryptography - OpenSSL GCM 解密中的后期身份验证

python - python-ecdsa 签名大小是否正确?

c - 使用 EC_KEY 时 EVP_PKEY_verify 不起作用

Java:将创建的对象访问共享资源

java - 入侵检测(XSS 攻击)是一个交叉问题吗?我们可以将它与 AOP 解耦吗?

java - 更新丢失文件的目标目录并设置属性

java - C : drive (or unix equivalent)? 是否有 java 系统属性

java - 与 Class.forName() 松耦合

java - Maven - 从 DependencyManagement 中排除传递依赖