- Object previousValue = manifest.getMainAttributes().putValue(key, value);
- if (previousValue != null && !previousValue.equals(value)) {
- if (ManifestConstants.IMPORT_PACKAGE.toString().equals(key)
- || ManifestConstants.EXPORT_PACKAGE.toString().equals(key))
- logger.log(TRACE, file.getFileName() + ": " + key + " was modified");
+ String previousValue = manifest.getMainAttributes().getValue(key);
+ boolean wasDifferent = previousValue != null && !previousValue.equals(value);
+ if (wasDifferent) {
+ boolean keepPrevious = false;
+ if (SPDX_LICENSE_IDENTIFIER.toString().equals(key) && previousValue != null)
+ keepPrevious = true;
+ else if (BUNDLE_VERSION.toString().equals(key) && wasDifferent)
+ if (previousValue.equals(value + ".0")) // typically a Maven first release
+ keepPrevious = true;
+
+ if (keepPrevious) {
+ if (logger.isLoggable(TRACE))
+ logger.log(TRACE, file.getFileName() + ": " + key + " was NOT modified, value kept is "
+ + previousValue + ", not overriden with " + value);
+ value = previousValue;
+ }
+ }
+
+ manifest.getMainAttributes().putValue(key, value);
+ if (wasDifferent) {
+ if (IMPORT_PACKAGE.toString().equals(key) || EXPORT_PACKAGE.toString().equals(key))
+ logger.log(TRACE, () -> file.getFileName() + ": " + key + " was modified");