相关疑难解决方法(0)

什么是超级罐?

我正在阅读Maven文档并且遇到了'uber-jar'这个名字.

优步罐的含义是什么?它的特性/优点是什么?

uberjar maven

227
推荐指数
4
解决办法
8万
查看次数

Gradle中的uberJar,fatJar和shadowJar有什么区别?

我想知道我什么时候应该使用哪个.我知道他们都汇集了所有依赖类,但它们如何彼此不同?

java build gradle maven

10
推荐指数
2
解决办法
4287
查看次数

使用JarJar重新打包工具

我已经将Web应用程序部署到Google应用程序引擎,而我的Web服务使用了jersey 1.14框架.当我尝试在GAE上使用或调用Web服务时,我得到了一个java.lang.IncompatibleClassChangeError:实现类.我四处搜索并意识到,球衣1.14取决于asm 3.1和谷歌应用程序引擎使用asm 4.0并意识到我必须使用JarJar打包依赖关系来解决这个问题,但我不知道如何做到这一点与JarJar.我发现的教程非常神秘,面向体验程序员.所以有人可以发布一个面向初学者的教程,或者指导我完成解决这个问题的步骤.

java google-app-engine jersey

9
推荐指数
2
解决办法
5970
查看次数

如何使用Gradle构建胖罐时编译不同的风格

我想在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.jar
  • jabref-macosx_x86_64.jar
  • jabref-windows_x86_32.jar
  • jabref-windows_x86_64.jar
  • jabref-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)

v8 gradle build.gradle j2v8

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

Maven war/jar 大小太大

我正在构建一个项目,其中最终的战争/罐子大小非常大。我不知道如何减小罐子的大小。

如何只构建项目所需的jar?

目前我们只是在依赖项中给出了 maven 构建插件,并在顶部给出了构建 war 或 jar 的工件 id

请指教。

谢谢。

java maven

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

Kotlin:可以通过元编程在编译期间修改函数吗?

在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.

overloading self-modifying kotlin kotlin-extension

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

JAR、Fat JAR、Executable JAR 的区别

JAR、Fat JAR 和可执行 JAR 之间有什么区别?它们是如何从命令行和 gradle.build 任务创建的(如果是 gradle 项目)?

除了上面提到的还有其他JAR吗?

java jar executable-jar

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