2

コンテキスト:実行可能ファイルを呼び出すMavenの目標があります(たまたまGroovyスクリプトですが、問題ではありません)。これは、ランタイムibraryへのパスを引数として必要とします(たまたまJDBCドライバーですが、そうではありません)どちらでも構いません)。

ドライバーへのパスをハードコーディングする代わりにclasspath dependency、Maven リポジトリーがある場所から選択されるように、パスを として構築しています (OS が異なるさまざまな環境があります)。

<classpath>
    <dependency>postgresql:postgresql</dependency> <!-- groupId:artifactId -->
</classpath>

問題: クラスパスが期待どおりに解決されず、ライブラリへのパスではなく、空です (したがって、呼び出しが失敗します)。

pom.xml の関連部分は次のとおりです。

<dependency>
  <groupId>postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <version>9.1-901.jdbc4</version>
  <scope>provided</scope>
</dependency>


<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <id>initialize-rule-plugin</id>
      <phase>compile</phase>
        <goals><goal>exec</goal></goals>
        <configuration>
          <executable>full\path\to\groovy</executable>
          <arguments>
            <argument>-cp</argument>
              <classpath>
                <dependency>postgresql:postgresql</dependency>
              </classpath>
            <argument>myscript.groovy</argument>
          </arguments>
        </configuration>
      </execution>
  </executions>
</plugin>

デバッグ出力は次のとおりです。

[DEBUG] Configuring mojo 'org.codehaus.mojo:exec-maven-plugin:1.2.1:exec' with basic configurator -->
[DEBUG]   (s) dependency = postgresql:postgresql
[DEBUG]   (f) arguments = [-cp, Classpath { postgresql:postgresql}, ]
[...]
[DEBUG] Collected project artifacts [org.springframework:spring-context:jar:3.1.2.RELEASE:compile, org.springframework:spring-aop:jar:3.1.2.RELEASE:compile, org.springframework:spring-beans:jar:3.1.2.RELEASE:compile, org.springframework:spring-core:jar:3.1.2.RELEASE:compile, org.springframework:spring-expression:jar:3.1.2.RELEASE:compile, org.springframework:spring-asm:jar:3.1.2.RELEASE:compile, org.springframework:spring-webmvc:jar:3.1.2.RELEASE:compile, org.springframework:spring-context-support:jar:3.1.2.RELEASE:compile, org.springframework:spring-web:jar:3.1.2.RELEASE:compile, org.springframework:spring-tx:jar:3.1.2.RELEASE:compile, aopalliance:aopalliance:jar:1.0:compile, org.springframework:spring-orm:jar:3.1.2.RELEASE:compile, org.springframework:spring-jdbc:jar:3.1.2.RELEASE:compile, org.slf4j:slf4j-api:jar:1.7.1:compile, org.slf4j:jcl-over-slf4j:jar:1.7.1:runtime, org.slf4j:slf4j-log4j12:jar:1.7.1:runtime, log4j:log4j:jar:1.2.17:compile, javax.validation:validation-api:jar:1.0.0.GA:compile, org.hibernate:hibernate-validator:jar:4.3.0.Final:compile, org.jboss.logging:jboss-logging:jar:3.1.0.CR2:compile, org.hibernate:hibernate-entitymanager:jar:4.1.7.Final:compile, org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:jar:1.0.0.Final:compile, dom4j:dom4j:jar:1.6.1:compile, org.javassist:javassist:jar:3.15.0-GA:compile, org.hibernate:hibernate-core:jar:4.1.7.Final:compile, antlr:antlr:jar:2.7.7:compile, org.hibernate.common:hibernate-commons-annotations:jar:4.0.1.Final:compile, org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile, org.codehaus.jackson:jackson-mapper-asl:jar:1.9.10:compile, org.codehaus.jackson:jackson-core-asl:jar:1.9.10:compile, javax.servlet:jstl:jar:1.2:compile, commons-dbcp:commons-dbcp:jar:1.4:compile, commons-pool:commons-pool:jar:1.5.4:compile, org.codehaus.groovy:groovy-all:jar:2.0.5:compile]
[DEBUG] Collected project classpath [C:\projects\myproject\target\classes]
[DEBUG] Toolchains are ignored, 'executable' parameter is set to c:\full\path\to\groovy
[DEBUG] Executing command line: cmd /c c:\full\path\to\groovy.bat -cp C:\projects\myproject\target\classes myscript.groovy 

ご覧のとおり、(存在する) ドライバーへのクラスパスを取得しません。

参照に依存関係のバージョン番号を含めて、または含めずに試しました。

前もって感謝します。

4

1 に答える 1

1

私のコメントによると、私は同じことをする別の方法を見つけました。他に解決策は投稿されていなかったので、誰かが同じ問題に遭遇した場合の回答として投稿します。

重要なのは、jarへのパスが入力されたプロパティをオンザフライで作成する別のプラグインを使用することです。

<plugin>
  <groupId>org.bitstrings.maven.plugins</groupId>
  <artifactId>dependencypath-maven-plugin</artifactId>
  <version>1.1.1</version>
  <executions>
    <execution>
      <id>set-all</id>
      <goals>
        <goal>set</goal>
      </goals>
    <configuration>
      <propertySets>
        <propertySet>
          <includes>
            <include>postgresql:postgresql:jar</include>
          </includes>
        </propertySet>
      </propertySets>
    </configuration>
    </execution>
  </executions>
</plugin>

[...]

<execution>
  <id>my-script</id>
  <phase>compile</phase>
  <goals>
    <goal>exec</goal>
  </goals>
  <configuration>
    <executable>path/to/groovy</executable>
    <arguments>
      <argument>-cp</argument>
      <argument>${postgresql:postgresql:jar}</argument>
      <argument>my-script.groovy</argument>
    </arguments>
  </configuration>
</execution>
于 2012-12-14T13:36:28.080 に答える