2012-05-13 1 views
0

필자는 maven 어셈블리 패키지를 사용하여 하나의 모노리딕 항아리를 만들었습니다. 포함 된 datanucleus 패키지이지만 OSGI 구조 (plugins.xml & META-INF/META-INF.MD)를 유지하지 않았기 때문에 오류가 발생합니다. stackoverflow ([질문] : Datanucleus, JDO and executable jar - how to do it?)에 대한 답변은 배포 가능한 단일 병을 만드는 방법에 대한 답변을 제공하지 않습니다.Datanucleus JDO in maven assembly jar

누구나 OSGI 구조를 보장하기 위해 사용할 수있는 maven 지시문을 알고 있습니까?

답변

1

그래서 문제는 모든 것을 모노리딕 항아리에 패키징한다는 것은 OSGI 구조가 다른 항아리의 OSGI 구조에 의해 겹쳐 쓰여진다는 것입니다. 모 놀리 틱 항아리의 장점은 하나의 파일을 서버로 밀어 넣는 것이었지만 필요하지는 않았습니다 (서버에 밀어 넣기 위해 capistrano를 사용했기 때문에)

대신에 최종 빌드 디렉토리에 jar 파일을 복사하는 것이 더 쉽습니다 .

https://devcenter.heroku.com/articles/java

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.example</groupId> 
<version>1.0-SNAPSHOT</version> 
<artifactId>helloworld</artifactId> 
<dependencies> 
    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>7.6.0.v20120127</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>copy-dependencies</id> 
        <phase>package</phase> 
        <goals><goal>copy-dependencies</goal></goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
</project> 
+0

정답 : Heroku가의 자바 설정이의 완벽한 예를있다! 사람들은 때로는이 모노리딕 단지 (때로는 우 버쟈 (uberjars)라고 부름)를 만들기 위해 매우 열중하고 있지만, 이와 관련된 모든 종류의 함정이 있습니다. 별도의 jar (또는 WAR와 같은 컨테이너에 들어있는 많은 jar)로 배포 할 수 있다면 훨씬 더 좋은 방법입니다. –