Skip to content

Instantly share code, notes, and snippets.

@gakuzzzz
Last active December 12, 2015 04:09
Show Gist options
  • Save gakuzzzz/4712381 to your computer and use it in GitHub Desktop.
Save gakuzzzz/4712381 to your computer and use it in GitHub Desktop.
Ant Build で Doma の apt がこけるパターンの再現。

Ant Build で Doma の apt がこけるパターンの再現。

内容

doma-jpetstore-1.28.0 をベース

  • src/main/java/demo/smart/dao/OrderLineItemDao.java に以下のようにメソッド追加
  • src/main/resources/META-INF/demo/smart/dao/OrderLineItemDao/ に 以下の findByAmount.sql 追加

補足

環境

Windows

  • Windows XP 32bit
  • javac 1.7.0_09
  • Apache Ant(TM) version 1.8.4 compiled on May 22 2012

Linux

  • CentOS release 6.3
  • javac 1.7.0_11
  • Apache Ant(TM) version 1.8.4 compiled on May 22 2012

推測

  • Domain オブジェクトを Dao の引数にすると発生する?
SELECT
LI.ORDERID,
LI.LINENUM,
LI.ITEMID,
LI.QUANTITY,
LI.UNITPRICE,
I.LISTPRICE,
I.productName,
I.attribute1,
I.attribute2,
I.attribute3,
I.attribute4,
I.attribute5
FROM
LINEITEM LI LEFT OUTER JOIN (
select
I.ITEMID,
I.LISTPRICE,
NAME AS productName,
ATTR1 AS attribute1,
ATTR2 AS attribute2,
ATTR3 AS attribute3,
ATTR4 AS attribute4,
ATTR5 AS attribute5
from
ITEM I, INVENTORY V, PRODUCT P
where
P.PRODUCTID = I.PRODUCTID
and
I.ITEMID = V.ITEMID
) I
ON
LI.ITEMID = I.ITEMID
WHERE
I.LISTPRICE > /*amount*/1
/*
* Copyright 2004-2010 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package demo.smart.dao;
import java.util.List;
import org.seasar.doma.BatchInsert;
import org.seasar.doma.Dao;
import org.seasar.doma.Select;
import demo.config.AppConfig;
import demo.smart.entity.OrderLineItem;
@Dao(config = AppConfig.class)
public interface OrderLineItemDao {
@Select
List<OrderLineItem> getLineItemsByOrderId(int orderId);
@BatchInsert
int[] insertLineItem(List<OrderLineItem> lineItems);
/** このメソッドを追加 */
@Select
List<OrderLineItem> findByAmount(Amount amount);
}
D:\workspace\doma-jpetstore>ant
Buildfile: D:\workspace\doma-jpetstore\build.xml
clean:
[delete] Deleting directory D:\workspace\doma-jpetstore\target
[mkdir] Created dir: D:\workspace\doma-jpetstore\target
[mkdir] Created dir: D:\workspace\doma-jpetstore\target\build
[mkdir] Created dir: D:\workspace\doma-jpetstore\target\apt_generated
copy:
[copy] Copying 30 files to D:\workspace\doma-jpetstore\target\build
compile:
[javac] D:\workspace\doma-jpetstore\build.xml:33: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 57 source files to D:\workspace\doma-jpetstore\target\build
[javac]
[javac]
[javac] 注釈処理で捕捉されない例外がスローされました。
[javac] 詳細は次のスタックトレースで調査してください。
[javac] java.lang.IllegalArgumentException: Amount
[javac] at org.seasar.doma.internal.apt.util.TypeMirrorUtil$4.defaultAction(TypeMirrorUtil.java:238)
[javac] at org.seasar.doma.internal.apt.util.TypeMirrorUtil$4.defaultAction(TypeMirrorUtil.java:175)
[javac] at javax.lang.model.util.SimpleTypeVisitor6.visitError(SimpleTypeVisitor6.java:168)
[javac] at com.sun.tools.javac.code.Type$ErrorType.accept(Type.java:1345)
[javac] at org.seasar.doma.internal.apt.util.TypeMirrorUtil.getTypeName(TypeMirrorUtil.java:175)
[javac] at org.seasar.doma.internal.apt.meta.QueryParameterMeta.<init>(QueryParameterMeta.java:69)
[javac] at org.seasar.doma.internal.apt.meta.AbstractQueryMetaFactory.createParameterMeta(AbstractQueryMetaFactory.java:166)
[javac] at org.seasar.doma.internal.apt.meta.SqlFileSelectQueryMetaFactory.doParameters(SqlFileSelectQueryMetaFactory.java:236)
[javac] at org.seasar.doma.internal.apt.meta.SqlFileSelectQueryMetaFactory.createQueryMeta(SqlFileSelectQueryMetaFactory.java:58)
[javac] at org.seasar.doma.internal.apt.meta.DaoMetaFactory.createQueryMeta(DaoMetaFactory.java:209)
[javac] at org.seasar.doma.internal.apt.meta.DaoMetaFactory.doMethodElement(DaoMetaFactory.java:183)
[javac] at org.seasar.doma.internal.apt.meta.DaoMetaFactory.doMethodElements(DaoMetaFactory.java:172)
[javac] at org.seasar.doma.internal.apt.meta.DaoMetaFactory.createTypeElementMeta(DaoMetaFactory.java:70)
[javac] at org.seasar.doma.internal.apt.meta.DaoMetaFactory.createTypeElementMeta(DaoMetaFactory.java:48)
[javac] at org.seasar.doma.internal.apt.AbstractGeneratingProcessor$1.handle(AbstractGeneratingProcessor.java:52)
[javac] at org.seasar.doma.internal.apt.AbstractProcessor.handleTypeElement(AbstractProcessor.java:40)
[javac] at org.seasar.doma.internal.apt.AbstractGeneratingProcessor.process(AbstractGeneratingProcessor.java:60)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:793)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:722)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1700(JavacProcessingEnvironment.java:97)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1029)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1163)
[javac] at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1108)
[javac] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:439)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:353)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:342)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:333)
[javac] at com.sun.tools.javac.Main.compile(Main.java:76)
[javac] at com.sun.tools.javac.Main.main(Main.java:61)
BUILD FAILED
D:\workspace\doma-jpetstore\build.xml:33: Compile failed; see the compiler error output for details.
Total time: 3 seconds
@nakamura-to
Copy link

  • Windows 8 64bit
  • javac 1.7.0_09
  • Apache Ant(TM) version 1.8.4 compiled on May 22 2012

で試しましたが、発生しませんでした。

c:\Dev\workspace-temp\doma-jpetstore>ver

Microsoft Windows [Version 6.2.9200]

c:\Dev\workspace-temp\doma-jpetstore>java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

c:\Dev\workspace-temp\doma-jpetstore>ant -version
Apache Ant(TM) version 1.8.4 compiled on May 22 2012

c:\Dev\workspace-temp\doma-jpetstore>ant
Buildfile: c:\Dev\workspace-temp\doma-jpetstore\build.xml

clean:
   [delete] Deleting directory c:\Dev\workspace-temp\doma-jpetstore\target
    [mkdir] Created dir: c:\Dev\workspace-temp\doma-jpetstore\target
    [mkdir] Created dir: c:\Dev\workspace-temp\doma-jpetstore\target\build
    [mkdir] Created dir: c:\Dev\workspace-temp\doma-jpetstore\target\apt_generated

copy:
     [copy] Copying 29 files to c:\Dev\workspace-temp\doma-jpetstore\target\build

compile:
    [javac] c:\Dev\workspace-temp\doma-jpetstore\build.xml:33: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 57 source files to c:\Dev\workspace-temp\doma-jpetstore\target\build
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.DomainProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.EnumDomainProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.ExternalDomainProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.DomainConvertersProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.EntityProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告:注釈プロセッサ'org.seasar.doma.internal.apt.DaoProcessor'から-source '1.7'より小さいソース・バージョン'RELEASE_6'がサポートされています
    [javac] 警告6個

war:
      [war] Building war: c:\Dev\workspace-temp\doma-jpetstore\target\doma-jpetstore.war

BUILD SUCCESSFUL
Total time: 4 seconds

mavenではビルドできますか?
SimpleTypeVisitor6が動いていますが、Javaのバージョンが7じゃない可能性あります。Java7ならSimpleTypeVisitor7が動くはずです。

@nakamura-to
Copy link

SimpleTypeVisitor6の件はSimpleTypeVisitor6とSimpleTypeVisitor7は継承関係にあるので、問題ないのかもしれません。しかし、Java7で動かすと警告が出るはずなのでそれがでていないのはなんでだろう?と思います。

@gakuzzzz
Copy link
Author

gakuzzzz commented Feb 5, 2013

ありがとうございます!

すいません、 これ、ただの import 漏れでした。
状況が再現できてるわけでは無さそうです。

Maven で試したところ普通にシンボルが見つかりませんというエラーでした。
Antでスタックトレースが同じたっだ為勘違いしました。もうしわけないです。

ちゃんと import を足してやれば Ant でも build 通りました。
別の問題くさいです。

出直してきます><

@gakuzzzz
Copy link
Author

gakuzzzz commented Feb 5, 2013

とするとbuild環境のクラスパスとかが怪しそうですね……。

@nakamura-to
Copy link

import漏れ、私も気づきました。私の環境だともっとわかりやすいエラーメッセージがでるんですけど、この辺りも微妙にちがいますね。

別の問題くさいです。

了解です。再現条件わかったらまた教えてください。

@nakamura-to
Copy link

<include name="*.jar"/>

みたいなところがあるならば、問題を切り分けるために一つ一つ明示的に置き換えていくのがいいかもしれません。
昔、Domaとは全然別の環境で作業しているとき、xxx-source.jarが誤動作の原因だったことがありました。

@gakuzzzz
Copy link
Author

gakuzzzz commented Feb 5, 2013

エラーメッセージがあれになるのは不思議ですね。

xxx-source.jarが誤動作の原因

なるほど、そういうのがあり得るんですね。
play の 依存lib をもろに <include name="*.jar"/> してるので試しに置き換えてみます。
ありがとうございます!

@gakuzzzz
Copy link
Author

結論!
やはり classpath の指定が問題だった。
play-module の依存ライブラリに path が通って無かったのが原因

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment