diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 09807ad21f1..b1bb043c67d 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -1,11 +1,11 @@
name: CI
-on:
+on:
push:
- branches:
+ branches:
- master
pull_request:
- branches:
+ branches:
- master
schedule:
- cron: "0 0 * * 1"
@@ -74,7 +74,7 @@ jobs:
java-version: 1.6
architecture: x64
- name: Build project
- run: ./mvnw -s nossl.settings.xml verify -Pintegration -Pjava6
+ run: ./mvnw -s .mvn/nossl.settings.xml verify -Pintegration -Pjava6
openj9-supported:
name: OpenJ9 (supported)
strategy:
@@ -103,11 +103,32 @@ jobs:
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v1
- with:
- fetch-depth: 1
- uses: actions/setup-java@v1
with:
java-version: 8
architecture: x64
- name: Build project
run: ./mvnw jacoco:prepare-agent verify jacoco:report coveralls:report -DrepoToken=${{ secrets.coveralls }} -Pintegration
+ release:
+ name: Release new version
+ runs-on: ubuntu-18.04
+ needs: [coverage]
+ if: github.event_name == 'push'
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ ref: master
+ - name: Consider release
+ id: release
+ run: echo "##[set-output name=release;]$(git log --format=%B -n 1 | grep ^\[release\] | wc -l)"
+ - uses: actions/setup-java@v1
+ if: steps.release.outputs.release > 0
+ with:
+ java-version: 8
+ architecture: x64
+ - name: Publish new version
+ if: steps.release.outputs.release > 0
+ run: |
+ echo "${{ secrets.gpg_secret }}" | gpg --batch --import
+ export GPG_TTY=$(tty)
+ ./mvnw -B -s .mvn/release.settings.xml release:prepare release:perform -Drepository.url=https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git -Dbintray.username=raphw -Dbintray.password=${{ secrets.bintray_password }} -Dgpg.passphrase=${{ secrets.gpg_passphrase }} -Dgpg.keyname=B4AC8CDC141AF0AE468D16921DA784CCB5C46DD5 -Dgradle.key=${{ secrets.gradle_key }} -Dgradle.secret=${{ secrets.gradle_secret }}
diff --git a/.mvn/A1039E8B.asc b/.mvn/A1039E8B.asc
new file mode 100644
index 00000000000..fdfaeaace2e
--- /dev/null
+++ b/.mvn/A1039E8B.asc
@@ -0,0 +1,65 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+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
+=iys3
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/nossl.settings.xml b/.mvn/nossl.settings.xml
similarity index 100%
rename from nossl.settings.xml
rename to .mvn/nossl.settings.xml
diff --git a/.mvn/release.settings.xml b/.mvn/release.settings.xml
new file mode 100644
index 00000000000..d7761347d9f
--- /dev/null
+++ b/.mvn/release.settings.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ gradle
+
+ ${gradle.key}
+ ${gradle.secret}
+
+
+
+
+
+ gpg.passphrase
+ ${gpg.passphrase}
+
+
+ bintray
+ ${bintray.username}
+ ${bintray.password}
+
+
+
diff --git a/README.md b/README.md
index 991f30a4190..74056004f2c 100644
--- a/README.md
+++ b/README.md
@@ -253,7 +253,9 @@ Byte Buddy is licensed under the liberal and business-friendly
[*Apache Licence, Version 2.0*](https://www.apache.org/licenses/LICENSE-2.0.html) and is freely available on
GitHub. Additionally, the *byte-buddy* distribution bundles ASM which is released under [a 3-clause BSD license](https://asm.ow2.io/license.html).
-Byte Buddy is further to the repositories of Maven Central and on JCenter. The project is built
+Byte Buddy binaries are published to the repositories of Maven Central and on JCenter. The artifacts signatures can be validated against [this PGP public key](https://keys.openpgp.org/search?q=rafael.wth@gmail.com) beginning with Byte Buddy 1.10.3. Older versions can be validated against [this older and weaker certificate](https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf42b96b8648b5c4a1c43a62fbb2914c1fa0811c3).
+
+The project is built
using Maven. From your shell, cloning and building the project would go
something like this:
diff --git a/byte-buddy-agent/pom.xml b/byte-buddy-agent/pom.xml
index 628ec58a881..ec340781423 100644
--- a/byte-buddy-agent/pom.xml
+++ b/byte-buddy-agent/pom.xml
@@ -5,7 +5,7 @@
byte-buddy-parent
net.bytebuddy
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
byte-buddy-agent
diff --git a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java
index 5232a717b70..cbef28dfe85 100644
--- a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java
+++ b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/ByteBuddyAgent.java
@@ -656,9 +656,9 @@ private static void installExternal(AttachmentProvider.Accessor.ExternalAttachme
for (File jar : externalAttachment.getClassPath()) {
classPath.append(File.pathSeparatorChar).append(quote(jar.getCanonicalPath()));
}
- if (new ProcessBuilder(quote(System.getProperty(JAVA_HOME)
+ if (new ProcessBuilder(System.getProperty(JAVA_HOME)
+ File.separatorChar + "bin"
- + File.separatorChar + (System.getProperty(OS_NAME, "").toLowerCase(Locale.US).contains("windows") ? "java.exe" : "java")),
+ + File.separatorChar + (System.getProperty(OS_NAME, "").toLowerCase(Locale.US).contains("windows") ? "java.exe" : "java"),
CLASS_PATH_ARGUMENT,
classPath.toString(),
Attacher.class.getName(),
diff --git a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java
index 30b210ed546..ae6f66c2a9c 100644
--- a/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java
+++ b/byte-buddy-agent/src/main/java/net/bytebuddy/agent/VirtualMachine.java
@@ -2019,7 +2019,8 @@ public int getOwnerIdOf(File file) {
try {
// The binding for 'stat' is very platform dependant. To avoid the complexity of binding the correct method,
// stat is called as a separate command. This is less efficient but more portable.
- Process process = Runtime.getRuntime().exec("stat -c=%u " + file.getAbsolutePath());
+ String statUserSwitch = Platform.isMac() ? "-f" : "-c";
+ Process process = Runtime.getRuntime().exec("stat " + statUserSwitch + " %u " + file.getAbsolutePath());
int attempts = this.attempts;
boolean exited = false;
String line = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")).readLine();
@@ -2043,7 +2044,7 @@ public int getOwnerIdOf(File file) {
process.destroy();
throw new IllegalStateException("Command for stat did not exit in time");
}
- return Integer.parseInt(line.substring(1));
+ return Integer.parseInt(line);
} catch (IOException exception) {
throw new IllegalStateException("Unable to execute stat command", exception);
}
@@ -2091,7 +2092,8 @@ private void notifySemaphore(File directory, String name, int count, short opera
try {
library.semop(semaphore, target, 1);
} catch (LastErrorException exception) {
- if (acceptUnavailable && Native.getLastError() == PosixLibrary.EAGAIN) {
+ if (acceptUnavailable && (Native.getLastError() == PosixLibrary.EAGAIN
+ || Native.getLastError() == PosixLibrary.EDEADLK)) {
break;
} else {
throw exception;
@@ -2123,6 +2125,11 @@ protected interface PosixLibrary extends Library {
*/
int EAGAIN = 11;
+ /**
+ * Indicates a dead lock on a resource.
+ */
+ int EDEADLK = 35;
+
/**
* Indicates that a semaphore's operations should be undone at process shutdown.
*/
diff --git a/byte-buddy-android-test/pom.xml b/byte-buddy-android-test/pom.xml
index ec77e8fe3e8..d15b646df8a 100644
--- a/byte-buddy-android-test/pom.xml
+++ b/byte-buddy-android-test/pom.xml
@@ -5,7 +5,7 @@
net.bytebuddy
byte-buddy-parent
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
byte-buddy-android-test
diff --git a/byte-buddy-android/pom.xml b/byte-buddy-android/pom.xml
index c67c3ff4603..a88b1a698a0 100644
--- a/byte-buddy-android/pom.xml
+++ b/byte-buddy-android/pom.xml
@@ -5,7 +5,7 @@
byte-buddy-parent
net.bytebuddy
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
byte-buddy-android
diff --git a/byte-buddy-benchmark/pom.xml b/byte-buddy-benchmark/pom.xml
index a035176163a..cfdb5650d67 100644
--- a/byte-buddy-benchmark/pom.xml
+++ b/byte-buddy-benchmark/pom.xml
@@ -5,7 +5,7 @@
byte-buddy-parent
net.bytebuddy
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
byte-buddy-benchmark
diff --git a/byte-buddy-dep/pom.xml b/byte-buddy-dep/pom.xml
index 0b02934623f..39c4c284389 100644
--- a/byte-buddy-dep/pom.xml
+++ b/byte-buddy-dep/pom.xml
@@ -5,7 +5,7 @@
net.bytebuddy
byte-buddy-parent
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
byte-buddy-dep
diff --git a/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java b/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java
index a1c5f2b8943..e713b2ad1c0 100644
--- a/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java
+++ b/byte-buddy-dep/src/test/java/net/bytebuddy/TypeCacheTest.java
@@ -7,6 +7,7 @@
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.concurrent.Callable;
+import java.util.logging.Logger;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -84,9 +85,20 @@ public void testCacheTypeCollection() throws Exception {
System.gc();
Thread.sleep(50L);
}
- assertThat(typeCache.find(classLoader, key), nullValue(Class.class));
- assertThat(typeCache.insert(classLoader, key, Void.class), is((Object) Void.class));
- assertThat(typeCache.find(classLoader, key), is((Object) Void.class));
+ try {
+ assertThat(typeCache.find(classLoader, key), nullValue(Class.class));
+ assertThat(typeCache.insert(classLoader, key, Void.class), is((Object) Void.class));
+ assertThat(typeCache.find(classLoader, key), is((Object) Void.class));
+ } catch (AssertionError ignored) {
+ Logger.getLogger("net.bytebuddy").warning("Cache was not cleared, possibly due to weak references not being collected, retrying...");
+ for (int index = 0; index < 50; index++) {
+ System.gc();
+ Thread.sleep(50L);
+ }
+ assertThat(typeCache.find(classLoader, key), nullValue(Class.class));
+ assertThat(typeCache.insert(classLoader, key, Void.class), is((Object) Void.class));
+ assertThat(typeCache.find(classLoader, key), is((Object) Void.class));
+ }
}
@Test
diff --git a/byte-buddy-gradle-plugin/pom.xml b/byte-buddy-gradle-plugin/pom.xml
index 0ac88b84c89..9c50d8329af 100644
--- a/byte-buddy-gradle-plugin/pom.xml
+++ b/byte-buddy-gradle-plugin/pom.xml
@@ -3,7 +3,7 @@
byte-buddy-parent
net.bytebuddy
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
4.0.0
diff --git a/byte-buddy-maven-plugin/pom.xml b/byte-buddy-maven-plugin/pom.xml
index 2f5445dca68..15879993369 100644
--- a/byte-buddy-maven-plugin/pom.xml
+++ b/byte-buddy-maven-plugin/pom.xml
@@ -3,7 +3,7 @@
byte-buddy-parent
net.bytebuddy
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
4.0.0
diff --git a/byte-buddy/pom.xml b/byte-buddy/pom.xml
index 5067985f7df..962d801368c 100644
--- a/byte-buddy/pom.xml
+++ b/byte-buddy/pom.xml
@@ -5,7 +5,7 @@
net.bytebuddy
byte-buddy-parent
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
byte-buddy
diff --git a/pom.xml b/pom.xml
index 16e0c3eb342..3554a5c4395 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,11 +1,10 @@
-
+
4.0.0
net.bytebuddy
byte-buddy-parent
- 1.10.3-SNAPSHOT
+ 1.10.4-SNAPSHOT
pom
2014
@@ -97,6 +96,7 @@
3.0.1
false
false
+ git@github.com:raphw/byte-buddy.git
@@ -127,9 +127,9 @@
- scm:git:git@github.com:raphw/byte-buddy.git
- scm:git:git@github.com:raphw/byte-buddy.git
- git@github.com:raphw/byte-buddy.git
+ scm:git:${repository.url}
+ scm:git:${repository.url}
+ ${repository.url}
HEAD
@@ -680,21 +680,9 @@
jar
-
-
- aggregate-javadoc
-
- aggregate
-
- package
-
- Byte Buddy (full API), version ${project.version}
-
- false
-
-
+
true
${asm.url}/javadoc
@@ -723,6 +711,12 @@
sign
+
+
+ --pinentry-mode
+ loopback
+
+
diff --git a/release-notes.md b/release-notes.md
index 7693bffd0d4..9b78806997f 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -1,6 +1,12 @@
Byte Buddy release notes
------------------------
+### 8. November 2019: version 1.10.3
+
+- Allow overriding the name of the native library for Windows attach emulation.
+- Use correct type pool in build plugin engine for decorators.
+- Fix attach emulation for OpenJ9 on MacOS.
+
### 16. October 2019: version 1.10.2
- Upgrade ASM to version 7.2.