2016-11-15 5 views
0

JavaFXとSeleniumライブラリを使用してIntelliJでプロジェクトを構築しました。 IDE内部で実行されたとき、プロジェクトは意図したとおりに機能します。 mvn clean;mvn compileでコンパイルし、新たに作成した.jarファイルを実行すると、プログラムのJavaFX部分が機能しますが、Seleniumライブラリが見つかりません。MavenはSelenium依存関係をコンパイルしません

<?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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <build> 
     <plugins> 

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

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
          <mainClass>Main</mainClass> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.8</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${com.toasttab.Epsonaut}/lib</outputDirectory> 
          <includeScope>compile</includeScope> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 



<groupId>com.jagdpanzer.epsonaut</groupId> 
    <artifactId>Epsonaut</artifactId> 
    <version>1.0</version> 

    <dependencies> 

    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>2.43.0</version> 
    </dependency> 

    </dependencies> 


</project> 

セレン依存関係はIDEの外pom作業に定義されているので、どのように私は正常にこのプロジェクトをビルドします:これは私のpom.xmlファイルのですか?

EDIT:私のMANIFEST.MFファイルは以下の通りです。

Manifest-Version: 1.0 
Implementation-Title: Epsonaut 
Implementation-Version: 1.0-SNAPSHOT 
Archiver-Version: Plexus Archiver 
Built-By: dougdemars 
Implementation-Vendor-Id: com.jadgpanzer.epsonaut 
Class-Path: lib/selenium-java-2.43.0.jar lib/selenium-chrome-driver-2. 
    43.0.jar lib/selenium-remote-driver-2.43.0.jar lib/cglib-nodep-2.1_3. 
    jar lib/json-20080701.jar lib/selenium-api-2.43.0.jar lib/guava-15.0. 
    jar lib/selenium-htmlunit-driver-2.43.0.jar lib/htmlunit-2.15.jar lib 
    /xalan-2.7.1.jar lib/serializer-2.7.1.jar lib/commons-collections-3.2 
    .1.jar lib/commons-lang3-3.3.2.jar lib/httpmime-4.3.3.jar lib/commons 
    -codec-1.9.jar lib/htmlunit-core-js-2.15.jar lib/xercesImpl-2.11.0.ja 
    r lib/xml-apis-1.4.01.jar lib/nekohtml-1.9.21.jar lib/cssparser-0.9.1 
    4.jar lib/sac-1.3.jar lib/commons-logging-1.1.3.jar lib/jetty-websock 
    et-8.1.15.v20140411.jar lib/jetty-util-8.1.15.v20140411.jar lib/jetty 
    -io-8.1.15.v20140411.jar lib/jetty-http-8.1.15.v20140411.jar lib/http 
    client-4.3.4.jar lib/httpcore-4.3.2.jar lib/selenium-firefox-driver-2 
    .43.0.jar lib/commons-io-2.4.jar lib/commons-exec-1.1.jar lib/seleniu 
    m-ie-driver-2.43.0.jar lib/jna-3.4.0.jar lib/platform-3.4.0.jar lib/s 
    elenium-safari-driver-2.43.0.jar lib/selenium-support-2.43.0.jar lib/ 
    webbit-0.4.15.jar lib/netty-3.5.5.Final.jar 
Created-By: Apache Maven 3.3.9 
Build-Jdk: 1.8.0_101 
Main-Class: Main 
+0

どのようなエラーが発生していますか? –

+0

ところで、あなたは ' $ {com.toasttab.Epsonaut}/lib'でそれを見ますか? –

+0

@ShmulikKleinそのディレクトリの中に、すべてのjarファイルが表示されます。私は彼らが私のビルドで正しく参照されていないと思いますか? – jagdpanzer

答えて

2

問題は、依存関係が${com.toasttab.Epsonaut}/libにコピーされている間に、jarのクラスパスが相対ディレクトリlib/を指していることです。

<outputDirectory>の値が<classpathPrefix>であることを確認してください。

任意のパスからjarファイルを実行できるようにしたい場合は、のゴールでmaven-assembly-pluginを使用することをお勧めします。

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
     <archive> 
      <manifest> 
      <mainClass>your.package.MainClass</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

mvn clean compile assembly:singleで実行してください。

+0

プラグインを 'maven-assembly-plugin'に置き換えていますか、それとも既存の' pom'に追加していますか? – jagdpanzer

+0

'maven-jar-plugin'と' maven-dependency-plugin'を 'maven-assembly-plugin'に置き換えることができます –

1

最後のjarファイルをZIPで開き、MANIFEST.MFファイルのクラスパス:値を確認します。
すべてのパスは、現在のディレクトリからアクセスできる必要があります。
現在のところは、javaを呼び出してそのjarファイルを実行する場所を意味します。

+0

私のMANIFEST.MFファイルを編集して入れました。プロジェクトディレクトリの一番上からjarファイルを実行する必要がありますか? – jagdpanzer

+0

マニフェストのパスは、相対パスである必要があります。 lib/selenium-java-2.43.0.jarの場合、libディレクトリがあるディレクトリからjarファイルを実行する必要があります。それがあなたのプロジェクトのトップであれば - そうです。しかし、私はそれがMavenがリソースをコピーした場所だと思います。$ {com.toasttab.Epsonaut} – Vadim

関連する問題