我建立一个脂肪-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>
我该如何解决这个问题,这样的路径正确生成和映射发现了什么?或者我必须改变我初始化映射的方式。但为什么测试会正常运行呢?