我想知道我什么时候应该使用哪个.我知道他们都汇集了所有依赖类,但它们如何彼此不同?
我已经将Web应用程序部署到Google应用程序引擎,而我的Web服务使用了jersey 1.14框架.当我尝试在GAE上使用或调用Web服务时,我得到了一个java.lang.IncompatibleClassChangeError:实现类.我四处搜索并意识到,球衣1.14取决于asm 3.1和谷歌应用程序引擎使用asm 4.0并意识到我必须使用JarJar打包依赖关系来解决这个问题,但我不知道如何做到这一点与JarJar.我发现的教程非常神秘,面向体验程序员.所以有人可以发布一个面向初学者的教程,或者指导我完成解决这个问题的步骤.
我想在Java项目中包含Java Bindings for V8("J2V8").原因是(i)V8 JavaScript引擎比JRE附带的JavaScript引擎快得多,并且(ii)我使用的库仅在JavaScript中可用,并且Java的端口是非常省力的.
问题是J2V8是针对不同平台编译的:linux 64bit,macos 64bit,windows 64 bit,windows 32 bit.
我现在想要生成不同的JAR,包含所有依赖项(fat jar):
jabref-linux_x86_64.jarjabref-macosx_x86_64.jarjabref-windows_x86_32.jarjabref-windows_x86_64.jarjabref-all.jar - 没有v8引擎的平台独立JAR我目前正在使用shadow插件创建胖罐.
请注意,该项目不是 Android项目.在那里,使用Android插件,这似乎是直截了当的.
第一个想法是引入配置和特定于配置的依赖项:
configurations {
linux_x86_64Compile.extendsFrom compile
macosx_x86_64Compile.extendsFrom compile
windows_x86_32Compile.extendsFrom compile
windows_x86_64Compile.extendsFrom compile
}
dependencies {
compile configuration: 'linux_x86_64', group: 'com.eclipsesource.j2v8', name: 'j2v8_linux_x86_x64', version: '4.6.0'
compile configuration: 'macosx_x86_64', group: 'com.eclipsesource.j2v8', name: 'j2v8_macosx_x86_x64', version: '4.6.0'
compile configuration: 'windows_x86_32', group: 'com.eclipsesource.j2v8', name: 'j2v8_win32_x86', version: '4.6.0'
compile configuration: 'windows_x86_64', group: 'com.eclipsesource.j2v8', name: …Run Code Online (Sandbox Code Playgroud) 我正在构建一个项目,其中最终的战争/罐子大小非常大。我不知道如何减小罐子的大小。
如何只构建项目所需的jar?
目前我们只是在依赖项中给出了 maven 构建插件,并在顶部给出了构建 war 或 jar 的工件 id
请指教。
谢谢。
在JavaScript/Python等动态语言中,可以在运行时覆盖或"修改"函数.例如,为了修改alertJS中的函数,可以这样做:
const _prev_alert = window.alert;
window.alert = function() {
_prev_alert.apply(this, arguments);
console.log("Alert function was called!");
}
Run Code Online (Sandbox Code Playgroud)
这将输出"调用警报功能!" 每次alert调用函数时都到控制台.
现在,显然这样的事情在Kotlin-JVM或Kotlin-Native的运行时期间是不可能的,因为它们具有静态特性.但是,对于那些相同的语言,是否有可能在编译期间修改未编译的函数?我不是指来自库的预编译函数,而是我在我正在开发的同一个项目中编写的函数.
例如,假设我有一个我写的函数get_number.我可以修改get_number为返回一个不同的数字而不改变它在main中的调用方式而不直接修改它的代码吗?(或者有一种方法我可以写原件,get_number所以修改可能在线下吗?)
fun main(args: Array<String>) {
println(get_number())
}
fun get_number(): Int {
return 3
}
// Without modifying the code above, can I get main to print something besides 3?
Run Code Online (Sandbox Code Playgroud)
我一直在阅读Kotlin的Annotations and Reflections元编程,所以也许那些可以控制编译器的行为并覆盖get_number代码?或者这是完全的疯狂,这种性质的唯一方法是通过在Kotlin上开发我自己的,独立的元编程包装器?
此外,只是为了澄清,这个问题不是关于Kotlin-JS,答案(如果存在)应该适用于Kotlin-JVM或Native.
JAR、Fat JAR 和可执行 JAR 之间有什么区别?它们是如何从命令行和 gradle.build 任务创建的(如果是 gradle 项目)?
除了上面提到的还有其他JAR吗?