shevek / jarjar Goto Github PK
View Code? Open in Web Editor NEWJar Jar Links is a utility that makes it easy to repackage Java libraries and embed them into your own distribution.
License: Apache License 2.0
Jar Jar Links is a utility that makes it easy to repackage Java libraries and embed them into your own distribution.
License: Apache License 2.0
If the file name contains "$", is it not handled? How to configure a file with "$".
After using rule to modify the class path, I realize the class paths in the files of META-INF/services
used by ServiceProvider
are not changed accordingly.
Is there a way to work around it?
It would be very convenient if the Gradle plugin was available through plugins.gradle.org
Gradle version 7.0 now reports the following error:
- Type 'JarjarTask' property 'destinationDir' is missing an input or output annotation.
Cloned, built with Gradle (would prefer a JAR download), run on Windows:
jarjar-command.bat
Exception in thread "main" java.lang.IllegalArgumentException: [output] is required.
at com.tonicsystems.jarjar.Main.valueOf(Main.java:95)
at com.tonicsystems.jarjar.Main.process(Main.java:130)
at com.tonicsystems.jarjar.Main.run(Main.java:75)
at com.tonicsystems.jarjar.Main.main(Main.java:144)
Same for jarjar-command.bat help
, jarjar-command.bat process x y z
, etc.
Hello Shevek,
I desperately need a new version of the wonderful JARJAR tool, but have a hard time building it from source (I'm a GRADLE analphabet ;-) ). Could you please produce a JAR file?
Thank you in advance,
Arno
classpath 'com.github.shevek.jarjar:jarjar-gradle:master'
api 'com.squareup.okhttp3:okhttp-urlconnection:3.12.13' api 'com.squareup.okhttp3:okhttp:3.12.13'
execption:
More than one file was found with OS independent path 'okhttp3/internal/publicsuffix/publicsuffixes.gz'
I wanted to raise this to your attention as an issue was raised on Gradle about a failure when using the 'org.anarres.jarjar' plugin.
The root cause of the issue seems to be the specification here: https://github.com/shevek/jarjar/blob/master/jarjar-gradle/src/main/java/org/anarres/gradle/plugin/jarjar/JarjarTask.java#L154
What is happening is that a filtered view of sourceFiles
is being set up as a task output and then a configuration is being added to sourceFiles
. This is then causing an issue in Gradle because it ends up trying to resolve the dependencies in this configuration to determine the task outputs at a time when a deadlock is possible. We are making a change in Gradle so that this situation is identified and we throw an error rather than allowing the deadlock, but I wanted to follow up as I think there are probably some improvements that can be made to this plugin.
I might be misunderstanding the intent here, but it does not seem correct that getByPassedArchives()
should be an output of this task. Task outputs should represent the things that the task produces. This value seems to represent inputs of the task that have not been included in the resulting archive. Since the task does not actually affect these files, they should not be a task output. In fact, it seems like instead the archiveBypasses
and archiveExcludes
properties should be input properties of this task to ensure proper incremental behavior.
Of course, there may be something here that I don't understand - if you feel like the way this task is implemented is correct, I'd love to dig into the use case to better understand it. In any event, at the moment, this task implementation will need to be updated to be compatible with 4.0 (resolving a configuration as part of a task output will now result in an error).
Hi, I have a couple of questions about the status of your jarjar repository. Apologies if this sounds like an interrogation I thought it might be quicker to ask all my questions in one go.
I think based on the history that you cloned it from code.google.com repository. Is that correct?
How does this differ from 1.4?
Is it meant to be the official or even defacto source for jarjar?
What is its current status of jarjar?
Is it being actively maintained?
What versions of Java class file does it support?
The main reason I am asking is that I have seen issues where the version I am using (1.4) does not appear to work properly, e.g. rewriting generic signatures, and wanted to upgrade but there does not appear to be a newer version.
Execute command line:
java -jar jarjar-command-1.1.1.jar --mode process --rules rule.txt classes.jar --output out.jar
rule.txt:
rule com.** cc.**
zap xx.**
keep aa.**
and then command line print:
[main] INFO com.tonicsystems.jarjar.transform.JarTransformer - Transforming archive ZipArchive(D:\java\Android\jarjar\jarjar-command\build\libs\classes.jar)
i check the out.jar, it is invalid, how should i do
This plugin doesn't work when doing a release build for an android app, I get the below error which is not present on a normal debug build.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:collectReleaseDependencies'.
> java.io.FileNotFoundException: GeyserAndroid\app\build\jarjar (Access is denied)
It displays slightly different on Linux
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:collectReleaseDependencies'.
> java.io.FileNotFoundException: GeyserAndroid/app/build/jarjar (Is a directory)
Thanks so much for this project! It's been awesome so far.
The only feature I could use that doesn't seem to be present is repackaging JARs from local projects. I.e., the following fails:
compile jarjar.repackage {
from project(':mylocalproject')
classRename 'original.name.**', 'new.name.@1'
}
Is it possible for this to be added?
Just making a note of the new classfile API. It might be useful longer term to move away from shading ASM and to relying on the JDK's builtin version.
I get an error when trying to compile my project using jarjar:
Caused by: org.gradle.api.internal.tasks.DefaultTaskContainer$TaskCreationException: Could not create task ':mysdk:jarjar-1'.
at org.gradle.api.internal.tasks.DefaultTaskContainer.taskCreationException(DefaultTaskContainer.java:715)
at org.gradle.api.internal.tasks.DefaultTaskContainer.access$600(DefaultTaskContainer.java:76)
at org.gradle.api.internal.tasks.DefaultTaskContainer$2.call(DefaultTaskContainer.java:303)
at org.gradle.api.internal.tasks.DefaultTaskContainer$2.call(DefaultTaskContainer.java:292)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
at org.gradle.api.internal.tasks.DefaultTaskContainer.doCreate(DefaultTaskContainer.java:292)
at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:278)
at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:361)
at org.anarres.gradle.plugin.jarjar.JarjarController.repackage(JarjarController.java:47)
at org.anarres.gradle.plugin.jarjar.JarjarController.repackage(JarjarController.java:56)
at org.anarres.gradle.plugin.jarjar.JarjarController$repackage.call(Unknown Source)
at build_cdx3zyz8xceek7riplsi3ular$_run_closure5.doCall(/Users/myuser/Projects/mysdk/mysdk/build.gradle:133)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.util.internal.ClosureBackedAction.execute(ClosureBackedAction.java:72)
at org.gradle.util.internal.ConfigureUtil.configureTarget(ConfigureUtil.java:155)
at org.gradle.util.internal.ConfigureUtil.configure(ConfigureUtil.java:106)
at org.gradle.api.internal.project.DefaultProject.dependencies(DefaultProject.java:1236)
at jdk.internal.reflect.GeneratedMethodAccessor215.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:484)
at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:196)
at org.gradle.internal.metaobject.CompositeDynamicObject.tryInvokeMethod(CompositeDynamicObject.java:98)
at org.gradle.internal.extensibility.MixInClosurePropertiesAsMethodsDynamicObject.tryInvokeMethod(MixInClosurePropertiesAsMethodsDynamicObject.java:34)
at org.gradle.groovy.scripts.BasicScript$ScriptDynamicObject.tryInvokeMethod(BasicScript.java:135)
at org.gradle.internal.metaobject.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:163)
at org.gradle.groovy.scripts.BasicScript.invokeMethod(BasicScript.java:84)
at build_cdx3zyz8xceek7riplsi3ular.run(/Users/myuser/Projects/mysdk/mysdk/build.gradle:89)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
... 148 more
Caused by: org.gradle.api.tasks.TaskInstantiationException: Could not create task of type 'JarjarTask'.
at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:95)
at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:82)
at org.gradle.util.internal.GUtil.uncheckedCall(GUtil.java:454)
at org.gradle.api.internal.AbstractTask.injectIntoNewInstance(AbstractTask.java:204)
at org.gradle.api.internal.project.taskfactory.TaskFactory.create(TaskFactory.java:82)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory.create(AnnotationProcessingTaskFactory.java:48)
at org.gradle.api.internal.tasks.DefaultTaskContainer.createTask(DefaultTaskContainer.java:322)
at org.gradle.api.internal.tasks.DefaultTaskContainer.access$200(DefaultTaskContainer.java:76)
at org.gradle.api.internal.tasks.DefaultTaskContainer$2.call(DefaultTaskContainer.java:296)
... 184 more
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/commons/RemappingClassAdapter
at com.tonicsystems.jarjar.transform.jar.DefaultJarProcessor.<init>(DefaultJarProcessor.java:35)
at org.anarres.gradle.plugin.jarjar.JarjarTask.<init>(JarjarTask.java:98)
at org.anarres.gradle.plugin.jarjar.JarjarTask_Decorated.<init>(Unknown Source)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at org.gradle.internal.instantiation.generator.AsmBackedClassGenerator$InvokeConstructorStrategy.newInstance(AsmBackedClassGenerator.java:2070)
at org.gradle.internal.instantiation.generator.AbstractClassGenerator$GeneratedClassImpl$GeneratedConstructorImpl.newInstance(AbstractClassGenerator.java:486)
at org.gradle.internal.instantiation.generator.DependencyInjectingInstantiator.doCreate(DependencyInjectingInstantiator.java:64)
at org.gradle.internal.instantiation.generator.DependencyInjectingInstantiator.newInstanceWithDisplayName(DependencyInjectingInstantiator.java:50)
at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:88)
... 192 more
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.commons.RemappingClassAdapter
... 203 more
My gradle module looks something like:
build.gradle:
buildscript {
dependencies {
classpath 'org.anarres.jarjar:jarjar-gradle:1.0.1'
}
}
plugins {
id 'com.android.application' version '7.1.0' apply false
id 'com.android.library' version '7.1.0' apply false
}
allprojects {
apply plugin: 'org.anarres.jarjar'
}
module/build.gradle
...
dependencies {
implementation jarjar.repackage {
from 'source.package.to.repackage'
}
}
I want to exclude a class from local module. I can't to this direct in modules, because they are aar modules with build.gradle like
configurations.maybeCreate("default")
artifacts.add("default", file('abcdef.aar'))
dependencies {
api project(":module1")
// api project(":module2") <-- exclude a class
api jarjar.repackage {
from ":module2" <--- how to specify ?
classDelete "com.google.something.**"
}
But I run into
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> Could not resolve all files for configuration ':library:detachedConfiguration3'.
> Could not find :module2:.
Required by:
project :library
How to do so with local modules ? eg from project (":module2")
doesn't work either
how to use the keep rule?
for example:
keep com.**
it does not work
Some links
https://sdkman.io/vendors
https://github.com/sdkman/sdkman-cli/wiki/Vendor-onboarding-process
It would be useful to be able to sdk install jarjar
Appreciate if you can consider release your jarjar libraries into the official maven repository, so aTalk can refer to it.
aTalk release the apk into android playstore and Fdroid. Fdroid has restriction on inclusion of any pre-built jar into the source.
aTalk is an open source: https://github.com/cmeng-git/atalk-android
Currently aTalk build.gradle is making reference to 'org.anarres.jarjar' jarjar, but seems this tool has not been updated for a while and is facing some problem i.e. NullPointerException in LambdaClass.createLambdaImplMethodTarget
=================
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'org.anarres.jarjar:jarjar-gradle:1.0.1' // working jarjar.repackage version
}
}
apply plugin: 'org.anarres.jarjar'
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.