Commit 81730b94 authored by acoburn's avatar acoburn
Browse files

Adds customized LDPath service

Resolves: #24
parent 591de910
Repository LDPath service
=========================
This is an extension of the `fcrepo-ldpath` service found in [`fcrepo-camel-toolbox`](https://github.com/fcrepo4-exts/fcrepo-camel-toolbox).
The interface and configuration is the same as with [`fcrepo-ldpath`](https://github.com/fcrepo4-exts/fcrepo-camel-toolbox/tree/master/fcrepo-ldpath).
Building
--------
To build this project use
gradle install
Deploying in OSGi
-----------------
This projects can be deployed in an OSGi container. For example using
[Apache Karaf](http://karaf.apache.org) version 4.x or better, you can run the following
command from its shell:
feature:repo-add mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features
feature:install acrepo-exts-ldpath
Configuration
-------------
## Configuration
The application can be configured by creating a file in
`$KARAF_HOME/etc/edu.amherst.acdc.exts.ldpath.cfg`. The following
values are available for configuration:
If the fedora repository requires authentication, the following values
can be set:
fcrepo.authUsername=<username>
fcrepo.authPassword=<password>
fcrepo.authHostname=localhost
fcrepo.authPort=8080
The baseUrl for the fedora repository.
fcrepo.baseUrl=http://localhost:8080/fcrepo/rest
The time Fedora triples are cached (in seconds)
fcrepo.cache.timeout=0
The global timeout for cache entries (in seconds)
cache.timeout=86400
The host to which to bind the HTTP endpoint
rest.host=localhost
The port at which ldpath requests can be sent.
rest.port=9086
The URL path prefix for the ldpath service.
rest.prefix=/ldpath
By editing this file, any currently running routes will be immediately redeployed
with the new values.
For more help see the Apache Camel documentation
http://camel.apache.org/
apply plugin: 'osgi'
description = 'LDPath service'
dependencies {
compile group: 'org.apache.camel', name: 'camel-core', version: camelVersion
compile group: 'org.apache.camel', name: 'camel-blueprint', version: camelVersion
compile group: 'org.apache.camel', name: 'camel-jetty9', version: camelVersion
compile group: 'org.apache.camel', name: 'camel-http4', version: camelVersion
compile group: 'org.apache.camel', name: 'camel-jackson', version: camelVersion
compile group: 'org.apache.marmotta', name: 'ldcache-api', version: marmottaVersion
compile group: 'org.apache.marmotta', name: 'ldpath-core', version: marmottaVersion
compile group: 'org.apache.marmotta', name: 'ldclient-provider-rdf', version: marmottaVersion
compile group: 'org.apache.httpcomponents', name: 'httpclient-osgi', version: httpclientVersion
compile group: 'org.apache.httpcomponents', name: 'httpcore-osgi', version: httpcoreVersion
compile group: 'org.fcrepo.camel', name: 'fcrepo-ldpath', version: fcrepoCamelToolboxVersion
compile(group: 'org.fcrepo.camel', name: 'fcrepo-camel', version: fcrepoCamelVersion) {
exclude(module: 'slf4j-log4j12')
}
testCompile group: 'junit', name: 'junit', version: junitVersion
testCompile group: 'org.apache.camel', name: 'camel-test-blueprint', version: camelVersion
testCompile group: 'ch.qos.logback', name: 'logback-classic', version: logbackVersion
}
task buildMainClasses {
ext.destDir = file('build/classes/main')
outputs.dir destDir
doLast {
destDir.mkdirs()
}
}
jar {
dependsOn buildMainClasses
manifest {
description project.description
docURL project.docURL
vendor project.vendor
license project.license
instruction 'Import-Package', """
org.apache.camel,
org.apache.http.auth,
org.apache.marmotta.ldcache.api,
org.apache.marmotta.ldcache.model,
org.apache.marmotta.ldcache.services,
org.apache.marmotta.ldclient.api.provider,
org.apache.marmotta.ldclient.api.endpoint,
org.apache.marmotta.ldclient.endpoint.rdf,
org.apache.marmotta.ldclient.provider.rdf,
org.apache.marmotta.ldpath.backend.linkeddata,
org.fcrepo.camel.ldpath,
${defaultOsgiImports}"""
instruction 'Export-Package', "edu.amherst.acdc.exts.ldpath;version=${projectOsgiVersion}"
}
}
artifacts {
archives (file('build/cfg/main/edu.amherst.acdc.exts.ldpath.cfg')) {
classifier 'configuration'
type 'cfg'
}
}
# If the fedora repository requires authentication, the following values can be set:
fcrepo.authUsername=
fcrepo.authPassword=
fcrepo.authHostname=localhost
fcrepo.authPort=8080
# The baseUrl for the fedora repository.
fcrepo.baseUrl=http://localhost:8080/fcrepo/rest
# The time Fedora triples are cached (in seconds)
fcrepo.cache.timeout=0
# The URL path prefix for the ldpath endpoint.
rest.prefix=/ldpath
# The port at which ldpath requests can be sent.
rest.port=9086
# The hostname that the servlet component binds to
rest.host=localhost
# The global timeout for cache entries (in seconds)
cache.timeout=86400
/*
* Copyright 2016 Amherst College
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.amherst.acdc.exts.ldpath;
import org.apache.marmotta.commons.http.ContentType;
import org.apache.marmotta.ldclient.api.endpoint.Endpoint;
/**
* @author acoburn
*/
public class GettyEndpoint extends Endpoint {
/**
* Create a Getty endpoint to be used with the Marmotta LDClient
*
* @param timeout the length of time (in seconds) to cache the data
*/
public GettyEndpoint(final Long timeout) {
super("Getty Endpoint", GettyProvider.PROVIDER_NAME, "http://vocab.getty.edu/.*", null, timeout);
setPriority(PRIORITY_HIGH);
addContentType(new ContentType("application", "ld+json", 1.0));
}
}
/*
* Copyright 2016 Amherst College
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.amherst.acdc.exts.ldpath;
import static java.util.Collections.singletonList;
import static java.util.Objects.requireNonNull;
import java.util.List;
import org.apache.marmotta.ldclient.api.endpoint.Endpoint;
import org.apache.marmotta.ldclient.provider.rdf.LinkedDataProvider;
/**
* @author acoburn
*/
public class GettyProvider extends LinkedDataProvider {
public static final String PROVIDER_NAME = "Getty Vocabulary";
@Override
public String getName() {
return PROVIDER_NAME;
}
@Override
public List<String> buildRequestUrl(final String resourceUri, final Endpoint endpoint) {
requireNonNull(resourceUri);
return singletonList("http://vocab.getty.edu/download/jsonld?uri=" + resourceUri);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0"
xsi:schemaLocation="
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0 http://aries.apache.org/schemas/blueprint-ext/blueprint-ext-1.2.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<!-- OSGI blueprint property placeholder -->
<cm:property-placeholder id="properties" persistent-id="edu.amherst.acdc.exts.ldpath" update-strategy="reload">
<cm:default-properties>
<cm:property name="fcrepo.authUsername" value=""/>
<cm:property name="fcrepo.authPassword" value=""/>
<cm:property name="fcrepo.authHostname" value="localhost"/>
<cm:property name="fcrepo.authPort" value="8080"/>
<cm:property name="fcrepo.baseUrl" value="http://localhost:8080/fcrepo/rest"/>
<cm:property name="fcrepo.cache.timeout" value="0"/>
<cm:property name="rest.prefix" value="/ldpath"/>
<cm:property name="rest.host" value="localhost"/>
<cm:property name="rest.port" value="9086"/>
<cm:property name="cache.timeout" value="86400"/>
</cm:default-properties>
</cm:property-placeholder>
<reference id="backend" interface="org.apache.marmotta.ldcache.api.LDCachingBackend" filter="(osgi.jndi.service.name=fcrepo/LDCacheBackend)"/>
<bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
<argument index="0" value="${fcrepo.authUsername}"/>
<argument index="1" value="${fcrepo.authPassword}"/>
</bean>
<bean id="authScope" class="org.apache.http.auth.AuthScope">
<argument index="0" type="java.lang.String" value="${fcrepo.authHostname}"/>
<argument index="1" type="int" value="${fcrepo.authPort}"/>
</bean>
<bean id="fedoraEndpoint" class="org.fcrepo.camel.ldpath.FedoraEndpoint">
<argument index="0" type="java.lang.String" value="${fcrepo.baseUrl}"/>
<argument index="1" type="java.lang.Long" value="${fcrepo.cache.timeout}"/>
</bean>
<bean id="client" class="org.fcrepo.camel.ldpath.ClientFactory" factory-method="createClient">
<argument ref="authScope"/>
<argument ref="credentials"/>
<argument ref="fedoraEndpoint"/>
<argument>
<list>
<bean class="edu.amherst.acdc.exts.ldpath.GettyEndpoint">
<argument type="java.lang.Long" value="${cache.timeout}"/>
</bean>
</list>
</argument>
<argument>
<list>
<bean class="edu.amherst.acdc.exts.ldpath.GettyProvider"/>
</list>
</argument>
</bean>
<bean id="config" class="org.apache.marmotta.ldcache.model.CacheConfiguration">
<argument ref="client"/>
<property name="defaultExpiry" value="${cache.timeout}"/>
</bean>
<bean id="ldcache" class="org.apache.marmotta.ldcache.services.LDCache">
<argument ref="config"/>
<argument ref="backend"/>
</bean>
<bean id="ldcachebackend" class="org.apache.marmotta.ldpath.backend.linkeddata.LDCacheBackend">
<argument ref="ldcache"/>
</bean>
<bean id="ldpath" class="org.fcrepo.camel.ldpath.LDPathWrapper">
<argument ref="ldcachebackend"/>
</bean>
<camelContext id="AcrepoLDPathContext" depends-on="ldpath" xmlns="http://camel.apache.org/schema/blueprint">
<package>org.fcrepo.camel.ldpath</package>
<route id="AcrepoLDPath">
<from uri="direct:ldpath"/>
<setBody>
<method ref="ldpath" method="programQuery(${headers.context}, ${body})"/>
</setBody>
</route>
</camelContext>
</blueprint>
......@@ -77,6 +77,7 @@ dependencies {
exclude(module: 'slf4j-log4j12')
}
testCompile group: 'org.fcrepo.camel', name: 'toolbox-features', version: fcrepoCamelToolboxVersion, classifier: 'features', ext: 'xml'
testCompile group: 'org.apache.camel.karaf', name: 'apache-camel', version: camelVersion, classifier:'features', ext: 'xml'
testCompile group: 'org.apache.activemq', name: 'activemq-karaf', version: activemqVersion, classifier:'features', ext: 'xml'
testCompile group: 'org.apache.karaf.features', name: 'standard', version: karafVersion, classifier:'features', ext: 'xml'
......@@ -143,6 +144,7 @@ test {
systemProperty 'karaf.image.port', randomPort()
systemProperty 'karaf.idiomatic.port', randomPort()
systemProperty 'karaf.fits.port', randomPort()
systemProperty 'karaf.ldpath.port', randomPort()
systemProperty 'fcrepo.dynamic.test.port', fcrepoWebPort
systemProperty 'fcrepo.dynamic.jms.port', fcrepoJmsPort
......
......@@ -83,6 +83,8 @@ public class AcrepoExtsSerializeXmlIT extends AbstractOSGiIT {
.versionAsInProject().classifier("features").type("xml"), "scr"),
features(maven().groupId("org.apache.camel.karaf").artifactId("apache-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("org.fcrepo.camel").artifactId("fcrepo-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("edu.amherst.acdc").artifactId("acrepo-karaf")
.type("xml").classifier("features").versionAsInProject(),
"acrepo-exts-serialize-xml"),
......
......@@ -80,6 +80,8 @@ public class AcrepoJsonLDIT extends AbstractOSGiIT {
.versionAsInProject().classifier("features").type("xml"), "scr"),
features(maven().groupId("org.apache.camel.karaf").artifactId("apache-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("org.fcrepo.camel").artifactId("fcrepo-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("edu.amherst.acdc").artifactId("acrepo-karaf")
.type("xml").classifier("features").versionAsInProject(),
"acrepo-exts-jsonld", "acrepo-services-jsonld"),
......
......@@ -81,6 +81,8 @@ public class AcrepoPcdmIT extends AbstractOSGiIT {
.versionAsInProject().classifier("features").type("xml"), "scr"),
features(maven().groupId("org.apache.camel.karaf").artifactId("apache-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("org.fcrepo.camel").artifactId("fcrepo-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("edu.amherst.acdc").artifactId("acrepo-karaf")
.type("xml").classifier("features").versionAsInProject(),
"acrepo-exts-pcdm"),
......
......@@ -60,6 +60,7 @@ public class AcrepoServicesIT extends AbstractOSGiIT {
final String jsonldPort = cm.getProperty("karaf.jsonld.port");
final String pcdmPort = cm.getProperty("karaf.pcdm.port");
final String imagePort = cm.getProperty("karaf.image.port");
final String ldpathPort = cm.getProperty("karaf.ldpath.port");
final String fitsPort = cm.getProperty("karaf.fits.port");
return new Option[] {
......@@ -79,21 +80,35 @@ public class AcrepoServicesIT extends AbstractOSGiIT {
.type("xml").classifier("features").versionAsInProject(), "activemq-camel"),
features(maven().groupId("org.apache.camel.karaf").artifactId("apache-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("org.fcrepo.camel").artifactId("fcrepo-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("org.fcrepo.camel").artifactId("toolbox-features")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("edu.amherst.acdc").artifactId("acrepo-karaf")
.type("xml").classifier("features").versionAsInProject(),
"acrepo-connector-broadcast",
"acrepo-exts-fits", "acrepo-exts-image", "acrepo-exts-jsonld", "acrepo-exts-pcdm",
"acrepo-exts-serialize-xml", "acrepo-exts-template",
"acrepo-exts-fits",
"acrepo-exts-image",
"acrepo-exts-jsonld",
"acrepo-exts-ldpath",
"acrepo-exts-pcdm",
"acrepo-exts-serialize-xml",
"acrepo-exts-template",
"acrepo-libs-jena", "acrepo-libs-sesame", "acrepo-libs-jsonld",
"acrepo-libs-jackson", "acrepo-libs-marmotta",
"acrepo-libs-jena",
"acrepo-libs-jsonld",
"acrepo-libs-jackson",
"acrepo-services-activemq", "acrepo-services-inference", "acrepo-services-jsonld",
"acrepo-services-mint", "acrepo-services-pcdm"),
"acrepo-services-activemq",
"acrepo-services-inference",
"acrepo-services-jsonld",
"acrepo-services-mint",
"acrepo-services-pcdm"),
editConfigurationFilePut("etc/edu.amherst.acdc.exts.fits.cfg", "rest.port", fitsPort),
editConfigurationFilePut("etc/edu.amherst.acdc.exts.image.cfg", "rest.port", imagePort),
editConfigurationFilePut("etc/edu.amherst.acdc.exts.ldpath.cfg", "rest.port", ldpathPort),
editConfigurationFilePut("etc/edu.amherst.acdc.exts.jsonld.cfg", "rest.port", jsonldPort),
editConfigurationFilePut("etc/edu.amherst.acdc.exts.pcdm.cfg", "rest.port", pcdmPort),
editConfigurationFilePut("etc/edu.amherst.acdc.exts.serialize.xml.cfg", "rest.port", metadataPort),
......@@ -112,6 +127,7 @@ public class AcrepoServicesIT extends AbstractOSGiIT {
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-fits")));
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-image")));
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-jsonld")));
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-ldpath")));
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-pcdm")));
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-serialize-xml")));
assertTrue(featuresService.isInstalled(featuresService.getFeature("acrepo-exts-template")));
......
......@@ -75,6 +75,8 @@ public class AcrepoTemplateIT extends AbstractOSGiIT {
.versionAsInProject().classifier("features").type("xml"), "scr"),
features(maven().groupId("org.apache.camel.karaf").artifactId("apache-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("org.fcrepo.camel").artifactId("fcrepo-camel")
.type("xml").classifier("features").versionAsInProject()),
features(maven().groupId("edu.amherst.acdc").artifactId("acrepo-karaf")
.type("xml").classifier("features").versionAsInProject(),
"acrepo-exts-template", "acrepo-services-jsonld"),
......
<?xml version='1.0' encoding='UTF-8'?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" name="amherst-repo-services-${project.version}">
<repository>mvn:org.fcrepo.camel/fcrepo-camel/${fcrepoCamelVersion}/xml/features</repository>
<feature name="acrepo-connector-idiomatic" version="${project.version}">
<details>Installs the id mapping service</details>
......@@ -13,7 +11,7 @@
<feature version="${camelVersionRange}">camel-jetty9</feature>
<feature version="${camelVersionRange}">camel-jackson</feature>
<feature version="${camelVersionRange}">camel-sql</feature>
<feature version="${fcrepoCamelVersion}">fcrepo-camel</feature>
<feature version="${fcrepoCamelVersionRange}">fcrepo-camel</feature>
<bundle dependency="true">mvn:org.codehaus.woodstox/woodstox-core-asl/${woodstoxVersion}</bundle>
......@@ -62,13 +60,24 @@
<configfile finalname="/etc/edu.amherst.acdc.exts.image.cfg">mvn:edu.amherst.acdc/acrepo-exts-image/${project.version}/cfg/configuration</configfile>
</feature>
<feature name="acrepo-exts-ldpath" version="${project.version}">
<details>Installs the Amherst customizations to fcrepo-ldpath</details>
<feature version="${fcrepoCamelToolboxVersionRange}">fcrepo-ldpath-core</feature>
<feature version="${fcrepoCamelToolboxVersionRange}">fcrepo-service-ldcache-file</feature>
<bundle>mvn:edu.amherst.acdc/acrepo-exts-ldpath/${project.version}</bundle>
<configfile finalname="/etc/edu.amherst.acdc.exts.ldpath.cfg">mvn:edu.amherst.acdc/acrepo-exts-ldpath/${project.version}/cfg/configuration</configfile>
</feature>
<feature name="acrepo-exts-pcdm" version="${project.version}">
<details>Installs the image service</details>
<feature version="${camelVersionRange}">camel</feature>
<feature version="${camelVersionRange}">camel-blueprint</feature>
<feature version="${camelVersionRange}">camel-jetty9</feature>
<feature version="${fcrepoCamelVersion}">fcrepo-camel</feature>
<feature version="${fcrepoCamelVersionRange}">fcrepo-camel</feature>
<feature version="${project.version}">acrepo-services-pcdm</feature>
<feature version="${project.version}">acrepo-libs-jena</feature>
......@@ -123,7 +132,7 @@
<feature version="${camelVersionRange}">camel-blueprint</feature>
<feature version="${camelVersionRange}">camel-jetty9</feature>
<feature version="${camelVersionRange}">camel-saxon</feature>
<feature version="${fcrepoCamelVersion}">fcrepo-camel</feature>
<feature version="${fcrepoCamelVersionRange}">fcrepo-camel</feature>
<bundle>mvn:edu.amherst.acdc/acrepo-exts-serialize-xml/${project.version}</bundle>
......@@ -144,7 +153,7 @@
<feature version="${camelVersionRange}">camel</feature>
<feature version="${camelVersionRange}">camel-blueprint</feature>
<feature version="${camelVersionRange}">camel-jetty9</feature>
<feature version="${fcrepoCamelVersion}">fcrepo-camel</feature>
<feature version="${fcrepoCamelVersionRange}">fcrepo-camel</feature>
<feature version="${project.version}">acrepo-services-jsonld</feature>
<bundle>mvn:edu.amherst.acdc/acrepo-exts-jsonld/${project.version}</bundle>
......@@ -161,7 +170,7 @@
<feature version="${camelVersionRange}">camel-jetty9</feature>
<feature version="${camelVersionRange}">camel-jackson</feature>
<feature version="${camelVersionRange}">camel-http4</feature>
<feature version="${fcrepoCamelVersion}">fcrepo-camel</feature>
<feature version="${fcrepoCamelVersionRange}">fcrepo-camel</feature>
<feature version="${project.version}">acrepo-services-jsonld</feature>
<bundle>mvn:edu.amherst.acdc/acrepo-exts-template/${project.version}</bundle>
......
......@@ -46,6 +46,8 @@ subprojects {
camelVersionRange = '[2.18,3)'
activemqVersionRange = '[5.14,6)'
fcrepoCamelVersionRange = '[4.5,5)'
fcrepoCamelToolboxVersionRange = '[4.7,5)'
/* Dependencies */
activemqVersion = '5.14.1'
......@@ -54,6 +56,7 @@ subprojects {
commonsLangVersion = '3.4'
derbyVersion = '10.12.1.1'
fcrepoCamelVersion = '4.5.0'
fcrepoCamelToolboxVersion = '4.7.0'
hk2Version = '2.4.0'
httpclientVersion = '4.5.2'
httpcoreVersion = '4.4.5'
......
......@@ -5,6 +5,7 @@ include ':acrepo-connector-idiomatic-mysql'
include ':acrepo-connector-idiomatic-pgsql'
include ':acrepo-exts-fits'
include ':acrepo-exts-image'
include ':acrepo-exts-ldpath'
include ':acrepo-exts-jsonld'
include ':acrepo-exts-pcdm'
include ':acrepo-exts-serialize-xml'
......@@ -23,6 +24,7 @@ project(':acrepo-connector-idiomatic-mysql').projectDir = "$rootDir/acrepo-conne
project(':acrepo-connector-idiomatic-pgsql').projectDir = "$rootDir/acrepo-connector-idiomatic-pgsql" as File
project(':acrepo-exts-fits').projectDir = "$rootDir/acrepo-exts-fits" as File
project(':acrepo-exts-image').projectDir = "$rootDir/acrepo-exts-image" as File
project(':acrepo-exts-ldpath').projectDir = "$rootDir/acrepo-exts-ldpath" as File
project(':acrepo-exts-jsonld').projectDir = "$rootDir/acrepo-exts-jsonld" as File
project(':acrepo-exts-pcdm').projectDir = "$rootDir/acrepo-exts-pcdm" as File
project(':acrepo-exts-serialize-xml').projectDir = "$rootDir/acrepo-exts-serialize-xml" as File
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment