Skip to content
Okay, it's pretty easy to instantiate objects in Java through standard reflection. However there are many cases where you need to go beyond what reflection provides. For example, if there's no public constructor, you want to bypass the constructor code, or set final fields. There are numerous clever (but fiddly) approaches to getting around this…
Java HTML CSS Shell Batchfile
Branch: master
Clone or download

Latest commit

Latest commit 14eb9bd Mar 22, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea/copyright Add IntelliJ copyright configuration Oct 1, 2018
.mvn/wrapper Upgrade the maven wrapper Oct 5, 2019
benchmark Upgrade plugins Mar 22, 2020
gae Update AppEngine SDK Mar 22, 2020
main Update copyrights to 2020 Jan 7, 2020
tck-android Update copyrights to 2020 Jan 7, 2020
tck Upgrade plugins Mar 22, 2020
website Update copyrights to 2020 Jan 7, 2020
.editorconfig Indent at 2 xml and html Jul 25, 2015
.gitattributes Ignore mvn wrapper during archive (close #57) Jun 26, 2017
.gitignore Ignore files generated by maven-release-plugin Aug 16, 2013
.travis.yml Travis build: openjdk8, openjdk11 Aug 2, 2019
Benchmarks.md Typo and grammar Apr 8, 2015
CONTRIBUTING.md Add a contributing agreement Jul 24, 2015
LICENSE.txt Add Apache 2 license to files Jun 17, 2009
README.md Variable version missing to do the release notes Oct 5, 2019
SupportedJVMs.md Specify that JRockit was dropped in version 3 May 7, 2019
deploy-website.sh Script to deploy the website Aug 3, 2015
deploy.sh Missing curly brace Oct 18, 2018
header.txt EOL with LF Dec 22, 2016
mvnw Upgrade the maven wrapper Oct 5, 2019
mvnw.cmd Upgrade the maven wrapper Oct 5, 2019
objenesis-formatting.xml EOL with LF Dec 22, 2016
pom.xml Upgrade plugins Mar 22, 2020
settings-example.xml Remove the list of JVMs and allow to overload the default one Oct 6, 2013

README.md

Objenesis

Objenesis is a library dedicated to bypass the constructor when creating an object. On any JVM there is.

You can find the website and user documentation at objenesis.org.

Developer information

Project status

Build Status Maven Central

Environment setup

I'm using:

  • Maven 3.6.2
  • IntelliJ Ultimate 2019.3 (thanks to JetBrains for the license) (it should also work with Eclipse)

To configure your local workspace:

  • Import the Maven parent project to Eclipse or IntelliJ
  • Import the Eclipse formatting file objenesis-formatting.xml (usable in Eclipse or IntelliJ)

To build with Maven

There are two different levels of build.

Build without any active profile

It is a basic compilation of the application.

mvn install

Full build

This build will create the source and javadoc jars and run spotbugs.

mvn install -Pfull

To run special builds

Run the Android TCK

  • Install the Android SDK (brew cask install android-sdk)
  • Install platform-tools and build-tools using the sdkmanager (sdkmanager "platform-tools" "build-tools")
  • Add an ANDROID_HOME to target the Android SDK (export ANDROID_HOME=$(realpath $(echo "$(dirname $(readlink $(which sdkmanager)))/../..")))
  • Configure a device (real or simulated) and launch it
  • Activate the debug mode if it's a real device
  • mvn package -Pandroid

Run the benchmarks

mvn package -Pbenchmark
cd benchmark
./launch.sh

Generate the website

mvn package -Pwebsite

To update the versions

  • mvn versions:set -DnewVersion=X.Y -Pall
  • mvn versions:commit -Pall if everything is ok, mvn versions:revert -Pall otherwise

Configure to deploy to the Sonatype maven repository

  • You will first need to add something like this to your settings.xml
<servers>
  <server>
    <id>sonatype-nexus-snapshots</id>
    <username>sonatypeuser</username>
    <password>sonatypepassword</password>
  </server>
  <server>
    <id>sonatype-nexus-staging</id>
    <username>sonatypeuser</username>
    <password>sonatypepassword</password>
  </server>
</servers>
  • Then follow the instructions from the site below to create your key to sign the deployed items

http://www.sonatype.com/people/2010/01/how-to-generate-pgp-signatures-with-maven/

To check dependencies and plugins versions

mvn versions:display-dependency-updates versions:display-plugin-updates -Pall

To upgrade the Maven wrapper

mvn -N io.takari:maven:wrapper -Dmaven=3.6.2

To update the license

mvn validate license:format -Pall

To release

  • Add the release notes in website/site/content/notes.html You use this code to generate it
# Get the milestone matching the version
version=???
milestone=$(curl -s "https://api.github.com/repos/easymock/objenesis/milestones" | jq ".[] | select(.title==\"$version\") | .number")
echo "<h1>Version $version ($(date '+%Y-%m-%d'))</h1>"
echo
echo "<ul>"  
curl -s "https://api.github.com/repos/easymock/objenesis/issues?milestone=${milestone}&state=all" | jq -r '.[] | "  <li>" + .title + " (#" + (.number|tostring) + ")</li>"'
echo "</ul>"
  • Add these servers to your settings.xml
<server>
  <id>bintray</id>
  <username>your-user-name</username>
  <password>your-api-key</password>
</server>
<server>
  <id>gpg.passphrase</id>
  <passphrase>your-passphrase</passphrase>
</server>
  • Set gpg_passphrase, bintray_api_key and bintray_user environment variables
  • Launch an Android device (virtual or physical)
  • Launch ./deploy.sh version
  • Answer the questions (normally, just acknowledge the proposed default)
  • Follow the instructions

If something fails and you need to rollback a bit, the following commands might help:

mvn release:rollback -Pall
git tag -d $version
git push origin :refs/tags/$version
git reset --hard HEAD~2

Deploy the website

  • Make sure the pom is at the version you want to release
  • Launch ./deploy-website.sh
You can’t perform that action at this time.