2016-09-05 8 views
0

renjin Java 응용 프로그램에 포함시키려는 일부 로컬 R 라이브러리가 있습니다. 일부 라이브러리는 완전히 R로 작성되고 일부 라이브러리에는 C++ 종속성이 있고 일부 라이브러리에는 S4 클래스가 있습니다. 이상적으로는 각 라이브러리를 2 부씩 유지하고 싶지 않습니다.Renjin 용 R 라이브러리 자동 포팅

로컬 R 라이브러리 (또는 소스)를 가져 와서 Renjin 호환 버전을 생성하는 자동화 된 방법이 있다면 궁금합니다.

+0

renjin의 메인 페이지에는 저장소에 대한 링크가 있습니다. http://packages.renjin.org/ –

+0

실망스럽게 생각 합니다만,이 작업을 쉽게 수행 할 수 있다면 _automagically_ renjin 팀은 몇 년 전에 완료했을 것입니다 . Java/C/C++ 교차로에는 여기에 숨겨진 몇 가지 장애물이 있습니다. 최선의 방법은 renjin 사람들과 이야기하는 것입니다. 행운을 빕니다. –

+2

우리는 자동적으로 그것을했다 Dirk! ;-) CRAN의 대부분의 프로젝트는 수정없이 Renjin을 위해 자동으로 빌드됩니다. – akbertram

답변

2

packages.renjin.org에 나열된 모든 CRAN 및 Bioconductor 패키지는 Java 바이트 코드 (C, C++ 및 Fortran 소스 포함)로 컴파일되고 완전히 자동화 된 빌드 시스템에 의해 원래 소스에서 JAR로 패키징됩니다.

Renjin 문서는 패키지 Renjin에 대한를 만드는 instructions이 포함되어 있지만 R 코드 패키지에 대한 GNU R에 대한 패키지의 차이는 단지 제안 (및 옵션) 디렉토리 레이아웃입니다.

디렉토리 구조에 대한 GNU R의 규칙을 따르는 자신의 R 패키지를 빌드하려면 R 소스 파일의 위치 정보가 포함 된 Maven POM 파일 만 추가해야합니다. 당신이 패키지와 JAR 파일을 생성 mvn package을의 루트에이 POM 파일을 넣어

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.renjin.cran</groupId> 
    <artifactId>YOUR PACKAGE NAME HERE</artifactId> 
    <version>YOUR PACKAGE VERSION HERE</version> 
    <distributionManagement> 
    <repository> 
     <id>renjin-packages</id> 
     <name>Renjin CI Repository</name> 
     <url>http://nexus.bedatadriven.com/content/repositories/renjin-packages</url> 
    </repository> 
    </distributionManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>methods</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>datasets</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>stats</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>grDevices</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>stats4</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>tools</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>utils</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>graphics</artifactId> 
     <version>0.8.2201</version> 
    </dependency> 
    <dependency> 
     <groupId>org.renjin</groupId> 
     <artifactId>compiler</artifactId> 
     <version>0.8.2201</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
    <repositories> 
    <repository> 
     <id>bedatadriven-public</id> 
     <url>http://nexus.bedatadriven.com/content/groups/public/</url> 
    </repository> 
    </repositories> 
    <pluginRepositories> 
    <pluginRepository> 
     <id>bedatadriven-public</id> 
     <url>http://nexus.bedatadriven.com/content/groups/public/</url> 
    </pluginRepository> 
    </pluginRepositories> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.renjin</groupId> 
     <artifactId>renjin-maven-plugin</artifactId> 
     <version>0.8.2201</version> 
     <executions> 
      <execution> 
      <id>renjin-compile</id> 
      <phase>process-classes</phase> 
      <goals> 
       <goal>namespace-compile</goal> 
      </goals> 
      <configuration> 
       <sourceDirectory>${basedir}/R</sourceDirectory> 
       <dataDirectory>${basedir}/data</dataDirectory> 
       <defaultPackages> 
       <package>methods</package> 
       <package>stats</package> 
       <package>utils</package> 
       <package>grDevices</package> 
       <package>graphics</package> 
       <package>datasets</package> 
       </defaultPackages> 
      </configuration> 
      </execution> 
      <execution> 
      <id>renjin-test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <timeoutInSeconds>30</timeoutInSeconds> 
       <testSourceDirectory>${basedir}/tests</testSourceDirectory> 
       <defaultPackages> 
       <package>methods</package> 
       <package>stats</package> 
       <package>utils</package> 
       <package>grDevices</package> 
       <package>graphics</package> 
       <package>datasets</package> 
       </defaultPackages> 
      </configuration> 
      </execution> 
      <execution> 
      <id>gnur-compile</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>make-gnur-sources</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

: 예를 들어 (패키지 이름과 버전에 대한 참고 자리).

더 많은 자동화가 필요한 경우 일종의 빌드 시스템을 사용하여 직접해야합니다. 패키지에 필요한 경우 POM에 종속성을 추가하는 것을 잊지 마십시오 (팁 : packages.renjin.org의 POM 코드 조각을 복사하십시오).