Code Monkey home page Code Monkey logo

jarjar's People

Contributors

alexarchambault avatar jekrock avatar mschaaf avatar obenabde avatar shevek avatar zawn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jarjar's Issues

Rule cannot modify service provider path.

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?

CLI doesn't work

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.

Please provide a ready-to-use "jarjar.jar"

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

Gradle plugin specifies a configuration as a task output

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

Current status of jarjar

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.

executing the command line does not take effect

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

Android release builds

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)

Project: https://github.com/rtm516/GeyserAndroid/

Add ability to repackage project JAR

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?

New classfile API

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.

Repackaging in Android AAR

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'
    }
}

How to handle local module ?

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

Request for release into maven repository

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'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.