0

他の多くの依存関係と同様に、Smooks といくつかの org.milyn.edi.unedifact マッピングを含む Maven を使用して、fat-JAR を構築しています。マッピング モデルは 1 つしか許可されていないため、次のようにメイン内で使用するモデルを選択します。

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"

テストは正常に実行され、実行すると期待どおりに脂肪の入った jar ファイルが生成されますmvn package assembly:assembly

org.milyn.edi.unedifact:d95a-mapping:1.4ただし、その jar を使用してマッピングをロードしようとすると、クラスパスの下 (および他のいくつかのマッピング) で検索されるため、マッピングが失敗します。

私は得る

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 マッピングは like という名前のフォルダーに配置されます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>

パスが正しく生成され、マッピングが見つかるように、どうすればその問題を解決できますか? または、マッピングを初期化する方法で何かを変更する必要がありますか? しかし、なぜテストが適切に実行されるのでしょうか?

4

1 に答える 1

0

私が見つけた唯一の解決策は、maven-antrun-plugin によってマッピング jar をターゲット フォルダーに配置し、そこから jar を実行することでした。

于 2015-11-25T14:45:43.080 に答える