2015-11-19 109 views
0

我建立一个脂肪-JAR包含的Smooks和sevreal org.milyn.edi.unedifact映射就像许多其他依赖的行家下EDIFACT模式。因为只有一个映射模型允许我选择内部主要如下Maven的包的Smooks脂肪罐子错误的文件夹上MVN装配

Smooks smooks = new Smooks(); 

SmooksResourceConfiguration modelLoaderResource = new SmooksResourceConfiguration(); 
modelLoaderResource.setResource(ModelLoader.class.getName()); 
modelLoaderResource.setParameter("mappingModel", ediFileModelUrn); 
smooks.addConfiguration(modelLoaderResource); 

GenericReaderConfigurator configurator = new GenericReaderConfigurator(UNEdifactReader.class); 
configurator.getParameters().setProperty("mappingModel", ediFileModelUrn); 
configurator.getParameters().setProperty("ignoreNewLines", "true"); 
smooks.setReaderConfig(configurator); 

StringWriter writer = new StringWriter(); 
smooks.filterSource(new StreamSource(new FileInputStream(this.getFileToBeImported().getAbsolutePath())), new StreamResult(writer)); 
return writer.toString();` 

使用哪一个与ediFileModelUrn看上去像"urn:org.milyn.edi.unedifact:d95a-mapping:1.4"例如

测试运行良好,并预期如果我跑mvn package assembly:assembly脂肪罐子产生。

但是,如果我尝试使用该jar加载映射失败,因为它们在类路径中寻找org.milyn.edi.unedifact:d95a-mapping:1.4(和一些其他映射)。

我得到一个

Caused by: org.milyn.edisax.EDIConfigurationException: 
Failed to locate jar file for EDI Mapping Model URN 
'org.milyn.edi.unedifact:d95b-mapping:1.4'. Jar must be available on classpath. 

所以我看着生成JAR。一切都很好,除了映射以外,它里面的所有类都可以。虽然该罐子中的每个其他类都很好地包装在其包装名称所属的位置,例如,

de.somecompany.someproject.SomeClass =>de/somecompany/someproject/SomeClass.class)将这些edifact映射放到名为org_milyn_edi_unedifact/d95b-mapping/1_4的文件夹中。

它看起来像在路径中所有.被替换为_之前,所有东西都被装进那个胖罐子里。该问题仅出现在映射中。所有其他的依赖关系都应该被打包,这让我认为这是milyn包装中的一个错误。

我POM看起来是这样的:

<dependencies> 

    ... 

    <!-- Smooks --> 
    <dependency> 
     <groupId>org.milyn</groupId> 
     <artifactId>milyn-smooks-all</artifactId> 
     <version>1.4</version> 
    </dependency> 

    <dependency> 
     <groupId>org.milyn</groupId> 
     <artifactId>testres</artifactId> 
     <version>1.6</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.milyn</groupId> 
     <artifactId>milyn-edisax-parser</artifactId> 
     <version>1.6</version> 
    </dependency> 

    <!-- Smooks EDI Cartridge --> 
    <dependency> 
     <groupId>org.milyn</groupId> 
     <artifactId>milyn-smooks-edi</artifactId> 
     <version>1.4</version> 
     <scope>compile</scope> 
    </dependency> 

    <!-- Required Mapping Models --> 
    <dependency> 
     <groupId>org.milyn.edi.unedifact</groupId> 
     <artifactId>d99b-mapping</artifactId> 
     <version>1.4</version> 
    </dependency> 

    <dependency> 
     <groupId>org.milyn.edi.unedifact</groupId> 
     <artifactId>d95a-mapping</artifactId> 
     <version>1.4</version> 
    </dependency> 

    <dependency> 
     <groupId>org.milyn.edi.unedifact</groupId> 
     <artifactId>d95b-mapping</artifactId> 
     <version>1.4</version> 
    </dependency> 

    ... 

</dependencies> 


<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
    </resources> 

    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-release-plugin</artifactId> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.6</version> 

       <configuration> 
        <finalName>${project.groupId}.${project.artifactId}-${project.version}</finalName> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>org.somecompany.MainClass</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 

       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>attached</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>org.somecompany.MainClass</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <inherited>true</inherited> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-javadoc-plugin</artifactId> 

       <executions> 
        <execution> 
         <id>attach-javadocs</id> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </pluginManagement> 
</build> 

我该如何解决这个问题,这样的路径正确生成和映射发现了什么?或者我必须改变我初始化映射的方式。但为什么测试会正常运行呢?

回答

0

我发现了把映射罐子的到目标文件夹由行家-antrun-插件并从那里执行该罐的唯一解决方案。