Skip to content

Commit d9ff5cc

Browse files
authored
Merge pull request #10 from cinaq/feature/5-m2ee-log
Support for m2ee-log.txt as mode/input
2 parents ce3076d + f6a7005 commit d9ff5cc

File tree

4 files changed

+120
-7
lines changed

4 files changed

+120
-7
lines changed

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,17 @@ It works as follow:
2525
- Next we loop over the metadata and determine which JAR to keep and discard duplicates. This is done based on the package name (e.g. org.package.velocity) and the version (e.g. 1.7)
2626
- Those marked to be discarded are then removed.
2727

28+
Note that `mode` now also accepts path to `m2ee-log.txt`. This file can be obtained when you run your app locally in **Mendix Studio Pro**.
29+
2830
## Usage
2931

3032
```bash
3133
mendix-userlib-cleaner --help
3234
Usage of mendix-userlib-cleaner:
33-
--clean Turn on to actually remove the duplicate jars. Default: false
34-
--mode string Jar parsing mode. Supported options: auto, strict (default "auto")
35-
--target string Path to userlib. Default: . (current directory) (default ".")
36-
--verbose Turn on to see debug information. Default: false
35+
--clean Turn on to actually remove the duplicate JARs.
36+
--mode string Jar parsing mode. Supported options: auto, strict or path to m2ee-log.txt (default "auto")
37+
--target string Path to userlib. (default ".")
38+
--verbose Turn on to see debug information.
3739
pflag: help requested
3840

3941

cmd/mendix-userlib-cleaner/main.go

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func main() {
4141
flag.String("target", ".", "Path to userlib.")
4242
flag.Bool("clean", false, "Turn on to actually remove the duplicate JARs.")
4343
flag.Bool("verbose", false, "Turn on to see debug information.")
44-
flag.String("mode", "auto", "Jar parsing mode. Supported options: auto, strict")
44+
flag.String("mode", "auto", "Jar parsing mode. Supported options: auto, strict or path to m2ee-log.txt")
4545

4646
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
4747
pflag.Parse()
@@ -51,6 +51,7 @@ func main() {
5151
mode := viper.GetString("mode")
5252
clean := viper.GetBool("clean")
5353
verbose := viper.GetBool("verbose")
54+
regularModes := []string{"auto", "strict"}
5455

5556
backend := logging.NewLogBackend(os.Stderr, "", 0)
5657
backendFormatter := logging.NewBackendFormatter(backend, format)
@@ -65,7 +66,15 @@ func main() {
6566

6667
filePaths := listAllFiles(targetDir)
6768
jars := listAllJars(filePaths, mode)
68-
keepJars := computeJarsToKeep(jars)
69+
keepJars := make(map[string]JarProperties)
70+
71+
if contains(regularModes, mode) {
72+
log.Infof("Mode: %v", mode)
73+
keepJars = computeJarsToKeep(jars)
74+
} else {
75+
log.Infof("Mode: m2ee-log at %v", mode)
76+
keepJars = computeJarsToKeepFromM2eeLog(jars, mode)
77+
}
6978
count := cleanJars(clean, filePaths, jars, keepJars)
7079

7180
if clean {
@@ -176,7 +185,7 @@ func getJarProps(filePath string, mode string) JarProperties {
176185

177186
log.Warningf("Failed to parse metadata from %v", filePath)
178187

179-
return JarProperties{filePath: ""}
188+
return JarProperties{filePath: filePath, packageName: filePath, fileName: filepath.Base(filePath), version: ""}
180189
}
181190

182191
func parseManifest(filePath string, text string) JarProperties {
@@ -276,6 +285,65 @@ func parseOptimistic(filePath string) JarProperties {
276285
return jarProp
277286
}
278287

288+
func contains(s []string, str string) bool {
289+
for _, v := range s {
290+
if v == str {
291+
return true
292+
}
293+
}
294+
295+
return false
296+
}
297+
298+
func computeJarsToKeepFromM2eeLog(jars []JarProperties, m2eeLog string) map[string]JarProperties {
299+
log.Info("Computing evicted jars from m2ee log")
300+
keepJars := make(map[string]JarProperties)
301+
evictedJars := getJarFileNames(m2eeLog)
302+
303+
for _, jar1 := range jars {
304+
if contains(evictedJars, jar1.fileName) {
305+
log.Infof("According to m2ee %v was evicted", jar1.fileName)
306+
continue
307+
}
308+
309+
if _, ok := keepJars[jar1.packageName]; !ok {
310+
keepJars[jar1.packageName] = jar1
311+
}
312+
}
313+
return keepJars
314+
}
315+
316+
func getJarFileNames(m2eeLog string) []string {
317+
b, err := ioutil.ReadFile(m2eeLog)
318+
names := []string{}
319+
if err != nil {
320+
log.Warningf("Unable to read m2ee-log file: %v", err)
321+
}
322+
text := string(b)
323+
324+
lines := strings.Split(text, "\n")
325+
for _, line := range lines {
326+
line = strings.TrimSpace(line)
327+
if !strings.HasPrefix(line, "Evicted ") {
328+
continue
329+
}
330+
331+
pair := strings.Split(line, " by ")
332+
if len(pair) < 2 {
333+
continue
334+
}
335+
336+
fullPath := strings.Replace(pair[0], "Evicted ", "", 1)
337+
forwardTokens := strings.Split(fullPath, "/")
338+
forwardLast := forwardTokens[len(forwardTokens)-1]
339+
backwardTokens := strings.Split(forwardLast, "\\")
340+
backwardLast := backwardTokens[len(backwardTokens)-1]
341+
names = append(names, backwardLast)
342+
}
343+
log.Debugf("Parsed evicted filenames: %v", names)
344+
return names
345+
}
346+
279347
func computeJarsToKeep(jars []JarProperties) map[string]JarProperties {
280348
log.Info("Computing duplicates")
281349
var keepJars = make(map[string]JarProperties)

resources/m2ee_log.txt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
2+
[rtlauncher:container$] INFO Evictions for component 'project-userlib':
3+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\fontbox-2.0.13.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\fontbox-2.0.24.jar.
4+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\owasp-java-html-sanitizer-20181114.1.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\owasp-java-html-sanitizer-20211018.2.jar.
5+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\checker-qual-2.5.2.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\checker-qual-3.8.0.jar.
6+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-io-2.3.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-io-2.8.0.jar.
7+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\joda-time-2.3.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\joda-time-2.10.9.jar.
8+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-lang3-3.7.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-lang3-3.11.jar.
9+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\pdfbox-2.0.13.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\pdfbox-2.0.24.jar.
10+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-io-2.6.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-io-2.8.0.jar.
11+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\bcprov-jdk15on-1.60.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\bcprov-jdk15on-164.jar.
12+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-lang3-3.9.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-lang3-3.11.jar.
13+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\j2objc-annotations-1.1.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\j2objc-annotations-1.3.jar.
14+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\httpclient-4.5.2.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\httpclient-4.5.10.jar.
15+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\error_prone_annotations-2.2.0.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\error_prone_annotations-2.5.1.jar.
16+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\bcpkix-jdk15on-1.60.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\bcpkix-jdk15on-164.jar.
17+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\owasp-java-html-sanitizer-20170515.1.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\owasp-java-html-sanitizer-20211018.2.jar.
18+
Evicted C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-logging.jar by C:\Users\%username%\Documents\Mendix\CERES-Development\deployment\model\lib\userlib\commons-logging-1.2.jar.
19+
[rtlauncher:container$] INFO Container start took 25733. Ready to accept admin requests.
20+
Mar 08, 2022 1:33:20 PM org.hsqldb.persist.Logger logInfoEvent
21+
INFO: checkpointClose start
22+
Mar 08, 2022 1:33:20 PM org.hsqldb.persist.Logger logInfoEvent
23+
INFO: checkpointClose synched
24+
Mar 08, 2022 1:33:21 PM org.hsqldb.persist.Logger logInfoEvent
25+
INFO: checkpointClose script done
26+
Mar 08, 2022 1:33:21 PM org.hsqldb.persist.Logger logInfoEvent
27+
INFO: checkpointClose end
28+
Mar 08, 2022 2:23:37 PM org.hsqldb.persist.Logger logInfoEvent
29+
INFO: Database closed
30+
31+
32+

resources/m2ee_logx.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true
2+
[rtlauncher:container$] INFO Evictions for component 'project-userlib':
3+
Evicted C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-logging.jar by C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-logging-1.2.jar.
4+
Evicted C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-codec-1.14.jar by C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-codec-1.15.jar.
5+
Evicted C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\httpcore-4.4.6.jar by C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\httpcore-4.4.13.jar.
6+
Evicted C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-codec-1.13.jar by C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-codec-1.15.jar.
7+
Evicted C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-codec-1.11.jar by C:\Users\%username%\Documents\Mendix\TPD-Development 2.0\deployment\model\lib\userlib\commons-codec-1.15.jar.
8+
[rtlauncher:container$] INFO Container start took 7075. Ready to accept admin requests.
9+
10+
11+

0 commit comments

Comments
 (0)