summaryrefslogtreecommitdiff
path: root/examples/gradle/scala.gradle
blob: 286e5e985c8659596864800f19d52e1df065cd5f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//
// This Gradle build file illustrates how to process Scala
// applications, including the Scala runtime.
// Usage:
//     gradle -b scala.gradle proguard
//

// Tell Gradle where to find the ProGuard task.

buildscript {
    repositories {
        flatDir dirs: '../../lib'
    }
    dependencies {
        classpath ':proguard'
    }
}

// Define a ProGuard task.

task proguard(type: proguard.gradle.ProGuardTask) {

    // You should probably import a more compact ProGuard-style configuration
    // file for all static settings, but we're specifying them all here, for
    // the sake of the example.
    //configuration 'configuration.pro'

    // Specify the input jars, output jars, and library jars.

    injars  'in.jar'
    injars  '/usr/local/java/scala-2.9.1/lib/scala-library.jar'
    //injars  '/usr/local/java/scala-2.9.1/lib/scala-compiler.jar', filter: '!META-INF/MANIFEST.MF'
    //injars  '/usr/local/java/scala-2.9.1/lib/jline.jar', filter: '!META-INF/MANIFEST.MF'
    outjars 'out.jar'

    libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
    //libraryjars '/usr/local/java/ant/lib/ant.jar'
    //...

    // Ignore some compiler artefacts.

    dontwarn 'scala.**'

    // Save the obfuscation mapping to a file, so you can de-obfuscate any stack
    // traces later on. Keep a fixed source file attribute and all line number
    // tables to get line numbers in the stack traces.
    // You can comment this out if you're not interested in stack traces.

    printmapping 'out.map'
    renamesourcefileattribute 'SourceFile'
    keepattributes 'SourceFile,LineNumberTable'

    // Preserve all annotations.

    keepattributes '*Annotation*'

    // You can print out the seeds that are matching the keep options below.

    //printseeds 'out.seeds'

    // Preserve all public applications.

    keepclasseswithmembers 'public class * { \
        public static void main(java.lang.String[]); \
    }'

    // Preserve some classes and class members that are accessed by means of
    // introspection.

    keep 'class * implements org.xml.sax.EntityResolver'

    keepclassmembers 'class * { \
        ** MODULE$; \
    }'

    keepclassmembernames 'class scala.concurrent.forkjoin.ForkJoinPool { \
        long eventCount; \
        int  workerCounts; \
        int  runControl; \
        scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack; \
        scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack; \
    }'

    keepclassmembernames 'class scala.concurrent.forkjoin.ForkJoinWorkerThread { \
        int base; \
        int sp; \
        int runState; \
    }'

    keepclassmembernames 'class scala.concurrent.forkjoin.ForkJoinTask { \
        int status; \
    }'

    keepclassmembernames 'class scala.concurrent.forkjoin.LinkedTransferQueue { \
        scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head; \
        scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail; \
        scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe; \
    }'

    // Preserve some classes and class members that are accessed by means of
    // introspection in the Scala compiler library, if it is processed as well.

    //keep 'class * implements jline.Completor'
    //keep 'class * implements jline.Terminal'

    //keep 'class scala.tools.nsc.Global'

    //keepclasseswithmembers 'class * { \
    //    <init>(scala.tools.nsc.Global); \
    //}'

    //keepclassmembers 'class * { \
    //    *** scala_repl_value(); \
    //    *** scala_repl_result(); \
    //}'

    // Preserve all native method names and the names of their classes.

    keepclasseswithmembernames 'class * { \
        native <methods>; \
    }'

    // Preserve the special static methods that are required in all enumeration
    // classes.

    keepclassmembers 'class * extends java.lang.Enum { \
        public static **[] values(); \
        public static ** valueOf(java.lang.String); \
    }'

    // Explicitly preserve all serialization members. The Serializable interface
    // is only a marker interface, so it wouldn't save them.
    // You can comment this out if your application doesn't use serialization.
    // If your code contains serializable classes that have to be backward 
    // compatible, please refer to the manual.

    keepclassmembers 'class * implements java.io.Serializable { \
        static final long serialVersionUID; \
        static final java.io.ObjectStreamField[] serialPersistentFields; \
        private void writeObject(java.io.ObjectOutputStream); \
        private void readObject(java.io.ObjectInputStream); \
        java.lang.Object writeReplace(); \
        java.lang.Object readResolve(); \
    }'

    // Your application may contain more items that need to be preserved; 
    // typically classes that are dynamically created using Class.forName:

    // keep 'public class mypackage.MyClass'
    // keep 'public interface mypackage.MyInterface'
    // keep 'public class * implements mypackage.MyInterface'

}