blob: 461efd12596e9645227319013f4e6c6ffcf1bbc1 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<title>Apache Jena - Using Jena with Eclipse</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="/css/bootstrap-icons.css" rel="stylesheet" media="screen"><link rel="stylesheet" type="text/css" href="" integrity="sha256-GxfDmhF&#43;IrRttMZvY5XcJ8E0pgN32H0tV0W4YA62lyI=">
<link rel="shortcut icon" href="/images/favicon.ico" />
<nav class="navbar navbar-expand-lg bg-body-tertiary" role="navigation">
<div class="container">
<div class="navbar-header">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
<a class="navbar-brand" href="/index.html">
<img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li id="homepage" class="nav-item"><a class="nav-link" href="/index.html"><span class="bi-house"></span> Home</a></li>
<li id="download" class="nav-item"><a class="nav-link" href="/download/index.cgi"><span class="bi-download"></span> Download</a></li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal"></span> Learn <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-header">Tutorials</li>
<li><a class="dropdown-item" href="/tutorials/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/fuseki2/index.html">Fuseki Triplestore</a></li>
<li><a class="dropdown-item" href="/documentation/notes/index.html">How-To's</a></li>
<li><a class="dropdown-item" href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
<li><a class="dropdown-item" href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/sparql.html">SPARQL tutorial</a></li>
<li><a class="dropdown-item" href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">References</li>
<li><a class="dropdown-item" href="/documentation/index.html">Overview</a></li>
<li><a class="dropdown-item" href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
<li><a class="dropdown-item" href="/documentation/assembler/index.html">Assembler</a></li>
<li><a class="dropdown-item" href="/documentation/tools/index.html">Command-line tools</a></li>
<li><a class="dropdown-item" href="/documentation/rdfs/">Data with RDFS Inferencing</a></li>
<li><a class="dropdown-item" href="/documentation/geosparql/index.html">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/inference/index.html">Inference API</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc.html">Javadoc</a></li>
<li><a class="dropdown-item" href="/documentation/ontology/">Ontology API</a></li>
<li><a class="dropdown-item" href="/documentation/permissions/index.html">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/extras/querybuilder/index.html">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/rdf/index.html">RDF API</a></li>
<li><a class="dropdown-item" href="/documentation/rdfconnection/">RDF Connection - SPARQL API</a></li>
<li><a class="dropdown-item" href="/documentation/io/">RDF I/O</a></li>
<li><a class="dropdown-item" href="/documentation/rdfstar/index.html">RDF-star</a></li>
<li><a class="dropdown-item" href="/documentation/shacl/index.html">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/shex/index.html">ShEx</a></li>
<li><a class="dropdown-item" href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
<li><a class="dropdown-item" href="/documentation/tdb/index.html">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/tdb2/index.html">TDB2</a></li>
<li><a class="dropdown-item" href="/documentation/query/text-query.html">Text Search</a></li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-journal-code"></span> Javadoc <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/documentation/javadoc.html">All Javadoc</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/arq/">ARQ</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/fuseki2/">Fuseki</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/geosparql/">GeoSPARQL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/jdbc/">JDBC</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/jena/">Jena Core</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/permissions/">Permissions</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/extras/querybuilder/">Query Builder</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/shacl/">SHACL</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/tdb/">TDB</a></li>
<li><a class="dropdown-item" href="/documentation/javadoc/text/">Text Search</a></li>
<form class="d-flex" role="search" action="/search" method="GET">
<div class="input-group">
<input class="form-control border-end-0 border m-0" type="search" name="q" id="search-query" placeholder="Search...." aria-label="Search" style="width: 10rem;">
<button class="btn btn-outline-secondary border-start-0 border" type="submit">
<i class="bi-search"></i>
<ul class="navbar-nav">
<li id="ask" class="nav-item"><a class="nav-link" href="/help_and_support/index.html" title="Ask"><span class="bi-patch-question"></span><span class="text-body d-none d-xxl-inline"> Ask</span></a></li>
<li class="nav-item dropdown">
<a href="#" title="Get involved" class="nav-link dropdown-toggle" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="bi-megaphone"></span><span class="text-body d-none d-xxl-inline"> Get involved </span><b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="/getting_involved/index.html">Contribute</a></li>
<li><a class="dropdown-item" href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">Project</li>
<li><a class="dropdown-item" href="/about_jena/about.html">About Jena</a></li>
<li><a class="dropdown-item" href="/about_jena/architecture.html">Architecture</a></li>
<li><a class="dropdown-item" href="/about_jena/citing.html">Citing</a></li>
<li><a class="dropdown-item" href="/about_jena/team.html">Project team</a></li>
<li><a class="dropdown-item" href="/about_jena/contributions.html">Related projects</a></li>
<li><a class="dropdown-item" href="/about_jena/roadmap.html">Roadmap</a></li>
<li><a class="dropdown-item" href="/about_jena/security-advisories.html">Security Advisories</a></li>
<li class="dropdown-divider"></li>
<li class="dropdown-header">ASF</li>
<li><a class="dropdown-item" href="">Apache Software Foundation</a></li>
<li><a class="dropdown-item" href="">Become a Sponsor</a></li>
<li><a class="dropdown-item" href="">License</a></li>
<li><a class="dropdown-item" href="">Security</a></li>
<li><a class="dropdown-item" href="">Thanks</a></li>
<li class="nav-item" id="edit"><a class="nav-link" href="" title="Edit this page on GitHub"><span class="bi-pencil-square"></span><span class="text-body d-none d-xxl-inline"> Edit this page</span></a></li>
<div class="container">
<div class="row">
<div class="col-md-12">
<div id="breadcrumbs">
<ol class="breadcrumb mt-4 p-2 bg-body-tertiary">
<li class="breadcrumb-item"><a href='/tutorials'>TUTORIALS</a></li>
<li class="breadcrumb-item active">USING JENA WITH ECLIPSE</li>
<h1 class="title">Using Jena with Eclipse</h1>
<main class="d-flex flex-xl-row flex-column">
<aside class="text-muted align-self-start mb-3 p-0 d-xl-none d-block">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<li><a href="#setting-up-your-environment">Setting up your environment</a></li>
<li><a href="#getting-the-source-code">Getting the source code</a></li>
<li><a href="#importing-the-source-code-into-eclipse">Importing the source code into Eclipse</a></li>
<article class="flex-column me-lg-4">
<p>This tutorial will guide you to set up Jena on your Eclipse. At the time of writing, the
latest version of Eclipse is 4.7.0. The version of Java used for this tutorial was Java
1.8.0_121. The operational system should not be a problem, so the only requirements are
Eclipse, Java 1.8.x, and git to checkout the Jena source code.</p>
<h2 id="setting-up-your-environment">Setting up your environment</h2>
<p>The first thing you will need to install is a Java JDK 1.8.x. The installation instructions
vary depending on the operating system, and will not be covered in this tutorial.</p>
<p>Once you have Java installed, you can proceed installing Eclipse. You can either download
an Eclipse distribution, or download the installer and choose one amongst the available
packages. For this tutorial, you will see instructions and screenshots taken from an
Eclipse IDE for Java Developers.</p>
<p>Eclipse comes with a bundled Apache Maven, but you may prefer to install it to another
directory and customize your local settings. As this is not a must have requirement, this
will not be covered in this tutorial.</p>
<h2 id="getting-the-source-code">Getting the source code</h2>
<p>Follow the instructions from our <a href="/getting_involved/index.html">Getting involved in Apache Jena</a>
page to check out the code from the Git repository. Most developers will check out the code into
their Eclipse workspace folder. But you should be able to import it into Eclipse from a
different folder too, as will be shown in the next sections.</p>
<p>Do not forget to run <code>mvn clean install</code> as instructed, so that Eclipse will be able to
find all local artifacts with no issues.</p>
<h2 id="importing-the-source-code-into-eclipse">Importing the source code into Eclipse</h2>
<p>Eclipse comes, by default, with Maven integration. In the past you would have to install
and configure a plug-in for that. But assuming you followed the instructions from the previous
sections, you should be ready to import the source code.</p>
<img src="figures/using_jena_with_eclipse-001.png" class="img-responsive" alt="Eclipse workspace">
<p>In the previous picture, you can see an empty Eclipse workspace. The view was configured to
display working sets, and there is a Jena working set already created. This is not necessary
for this tutorial, but you may find it useful if you work on separate projects at the same
time (e.g. working on Apache Commons RDF and Apache Jena projects simultaneously).</p>
<p>Eclipse keeps, by default, your projects on the left hand side panel. Right click somewhere
on that panel and choose <i>Import</i>. Alternatively, you can navigate using the top menu
to <i>File</i> / <i>Import</i>.</p>
<img src="figures/using_jena_with_eclipse-002.png" class="img-responsive" alt="Import project context menu">
<p>That will open a menu dialog, where you should find several types of projects to
import into your workspace. For Jena, you must select import <i>Existing Maven Projects</i>,
under the <i>Maven</i> project category.</p>
<img src="figures/using_jena_with_eclipse-003.png" class="img-responsive" alt="Import existing Maven project">
<p>Clicking <i>Next</i> will bring you to another screen where you can choose the location
of Jena source code. Point it to the folder where you checked out the Jena source code
in the previous section of this tutorial.</p>
<img src="figures/using_jena_with_eclipse-004.png" class="img-responsive" alt="Choosing source code location">
<p>Click <i>Finish</i> and Eclipse will start importing your project. This may take
a few minutes, depending on your computer resources. You can keep an eye at the <i>Progress</i>
tab, in the bottom panel, to see what is the status of the import process.</p>
<p>Once the project has been imported into your workspace, you should see something similar to the
following screenshot.</p>
<img src="figures/using_jena_with_eclipse-005.png" class="img-responsive" alt="Jena in Eclipse">
<!-- this can be removed when we fix shading guava -->
<p>After the import process is complete, Eclipse will start building the project
automatically if you have it configured with the default settings, or you may have to
click on <i>Project</i> / <i>Build All</i>.</p>
<p>Eclipse will display a red icon on the project folders with build problems. We will see now how
to fix these build problems, so Eclipse can successfully build and run the project.</p>
<img src="figures/using_jena_with_eclipse-006.png" class="img-responsive" alt="Eclipse build problems">
<p>The build problems are related to a known
<a href="">issue due to how the project shades Google Guava classes</a>.</p>
<p>The workaround is to make sure the <i>jena-shaded-guava</i> Maven module remains closed
in Eclipse. You can simply right click on the project, and choose Close. Its icon should
change, indicating it has been closed.</p>
<img src="figures/using_jena_with_eclipse-007.png" class="img-responsive" alt="Close jena-shaded-maven module">
<p>After doing that, it is good to trigger a <i>Clean</i> on all projects, so that
Eclipse can clean and re-build everything.</p>
<img src="figures/using_jena_with_eclipse-008.png" class="img-responsive" alt="Clean all Eclipse projects">
<p>You may also need to update the Maven project settings, so that Eclipse
is aware that the project is closed and it will use a local artifact, rather than the
module in the workspace.</p>
<img src="figures/using_jena_with_eclipse-009.png" class="img-responsive" alt="Update Maven projects settings">
<p>If you followed all steps, and there is nothing else running in your Eclipse
(check the Progress tab) then your Jena project should have been built with success.</p>
<img src="figures/using_jena_with_eclipse-010.png" class="img-responsive" alt="Jena built in Eclipse">
<p>If you would like to test Fuseki now, for example, you can expand the <i>jena-fuseki-core</i>
Maven module, navigate to the <i>org.apache.jena.fuseki.cmd</i> package, and run
<i>FusekiCmd</i> as a Java Application.</p>
<img src="figures/using_jena_with_eclipse-011.png" class="img-responsive" alt="Run Fuseki in Eclipse">
<p>That should initialize Fuseki, and have it listening on <a href="http://localhost:3030">http://localhost:3030</a>.</p>
<img src="figures/using_jena_with_eclipse-012.png" class="img-responsive" alt="Fuseki running in Eclipse">
<p>Now you should also be able to debug Jena, modify the source code and build the
project again, or import or create other projects into your workspace, and use them
with the latest version of Jena.</p>
<aside class="text-muted align-self-start mb-3 mb-xl-5 p-0 d-none d-xl-flex flex-column sticky-top">
<h2 class="h6 sticky-top m-0 p-2 bg-body-tertiary">On this page</h2>
<nav id="TableOfContents">
<li><a href="#setting-up-your-environment">Setting up your environment</a></li>
<li><a href="#getting-the-source-code">Getting the source code</a></li>
<li><a href="#importing-the-source-code-into-eclipse">Importing the source code into Eclipse</a></li>
<footer class="bd-footer py-4 py-md-5 mt-4 mt-lg-5 bg-body-tertiary">
<div class="container" style="font-size:80%" >
Copyright &copy; 2011&ndash;2023 The Apache Software Foundation, Licensed under the
<a href="">Apache License, Version 2.0</a>.
Apache Jena, Jena, the Apache Jena project logo, Apache and the Apache feather logos are trademarks of
The Apache Software Foundation.
<a href=""
>Apache Software Foundation Privacy Policy</a>.
<script src="/js/popper.min.js.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<script src="/js/improve.js" type="text/javascript"></script>
<script type="text/javascript">
(function() {
'use strict'
const links = document.querySelectorAll(`a[href="${window.location.pathname}"]`)
if (links !== undefined && links !== null) {
for (const link of links) {
let parentElement = link.parentElement
let count = 0
const levelsLimit = 4
while (['UL', 'LI'].includes(parentElement.tagName) && count <= levelsLimit) {
if (parentElement.tagName === 'LI') {
parentElement = parentElement.parentElement